Printemps de Démarrage : Arriver @Prévue cron de la valeur à partir de la base de données
Je suis en utilisant Spring Boot
et ont des problèmes de la planification d'un cron task
à l'aide de valeurs existant dans la base de données.
Pour le moment, je suis en train de lire les valeurs de propriétés de fichier comme ci-dessous :
@Scheduled(cron= "${time.export.cron}")
public void performJob() throws Exception {
//do something
}
Cela fonctionne très bien, mais au lieu d'obtenir des valeurs de propriétés de fichier, je veux les obtenir à partir de la base de données de la table. Est-il possible, et comment ?
Pour le printemps, il n'a pas d'importance où les propriétés viennent, fichiers, base de données, git tant qu'ils sont en fin de compte des propriétés.
J'ai essayé de mettre en œuvre une méthode qui apporte de la chaîne de valeur à partir de la base de données et essayez d'injecter dans cette chaîne de @Prévue, mais il est dit : La valeur de l'annotation attribut Prévue.cron doit être une expression constante
Vous n'avez pas besoin de changer quoi que ce soit sur le
J'ai essayé de mettre en œuvre une méthode qui apporte de la chaîne de valeur à partir de la base de données et essayez d'injecter dans cette chaîne de @Prévue, mais il est dit : La valeur de l'annotation attribut Prévue.cron doit être une expression constante
Vous n'avez pas besoin de changer quoi que ce soit sur le
@Scheduled
vous avez seulement besoin de récupérer les propriétés de la base de données et les transmettre à l' context:property-placeholder
ou si vous utilisez java config utiliser un ApplicationContextInitializer
pour ajouter un PropertySource
à faire de même.OriginalL'auteur Daniel | 2016-05-09
Vous devez vous connecter pour publier un commentaire.
vous pouvez ajouter un haricot pour obtenir cron de la valeur à partir de la base de données dans le SpringBootApplication principal de la classe ou de la classe de configuration. L'exemple de code est ci-dessous:
vous devez créer une table et de fournir des valeurs appropriées dans la base de données. Après cela, vous pouvez fournir la fève à l'intérieur de l' @Prévue. L'exemple de code est ci-dessous:
Espère que cela fonctionne pour votre question.
Nice!! Il m'a beaucoup aidé! Merci.
C'est bon il a sauvé mon temps beaucoup. Je vous remercie. Je suis curieux de savoir si je suis la mise à jour de cron valeur de temps en DB est il sera ramasser plus tard un ou vieux cron temps?
OriginalL'auteur Vignesh
Pour atteindre vos objectifs, vous devez configurer votre planificateur lors de l'exécution. Cela signifie que vous devez utiliser à un niveau plus bas planificateur de l'API. Précisément lorsque vous avez déjà préparé connecter à votre base de données vous pouvez configurer votre planificateur. Je pense que vous avez besoin de se débarrasser de l'aide de @Prévu d'annotation et de manully gérer votre planificateur.
Je pense que ces sujets peuvent aider à décrire ce que je veux dire:
Comment changer le Printemps @Prévue fixedDelay au moment de l'exécution
Planification d'un travail avec le Printemps par programme (avec fixedRate de définir dynamiquement)
Cependant toujours, vous pouvez utiliser les approches où vous intercepter le haricot création et remplacer annotation annotation avec des métadonnées personnalisées, mais dans le but de mettre en œuvre ce que vous devez savoir beaucoup de cadre de détails et la façon @Prévue annatation processeur travaille.
OriginalL'auteur Alex
Vous avez besoin pour charger les propriétés de la table de base de données dans laquelle votre valeur stockée.
et le fusionner db propriétés avec des propriétés de l'application
Pour plus de contribuer à orienter les https://analyzejava.wordpress.com/2015/01/16/loading-configuration-properties-from-database-in-spring-based-application/
OriginalL'auteur NIrav Modi
À l'aide de @Bean méthode annotée fera l'affaire. Mais comme SpringBoot ne va faire appel de cette méthode est de 1 fois, et le retour version en cache après cela, vous aurez besoin de redémarrer le Printemps pour obtenir la nouvelle valeur.
Pour obtenir la nouvelle de l'exécution à partir de la base de données, à l'aide de SchedulingConfigurer:
Note: ne pas utiliser @Prévue par ce biais.
OriginalL'auteur FatalFzrry