2016-12-07 3 views
0

comme indiqué dans le titre d'une question, je dois définir Spring Scheduler qui va exécuter la méthode pour charger quelque chose de la base de données dans la mémoire, Le fait est que j'ai plusieurs instances de ce serveur et je ne veux pas que tout le monde commence à s'exécuter en même temps car cela ralentira la DB. Donc, je veux que l'heure soit à une minute au hasard quelque part entre 4h00 et 4h30Spring @Scheduled à démarrer tous les jours à une minute aléatoire entre 04h00 et 04h30

Ainsi disons qu'une instance commencera tous les jours à 4h03, l'autre à 4h09, la troisième à 4h21, etc. L'exécution de la requête dure 1 minute.

Est-ce possible de faire avec l'expression cron, mais sans utiliser bash $ RANDOM (parce que je pense que je ne l'ai pas), ou je dois peut-être injecter cette valeur aléatoire d'une autre manière dans

@Scheduled(cron="* randomMinuteValue 4 * * *") 
+0

Je ne ferais pas comme ça. Pourquoi ne pas les démarrer tous en même temps et les étrangler en fonction du nombre de connexions utilisées dans le pool de connexions à la base de données. –

+0

Mon erreur J'ai écrit J'ai plusieurs instances de service mais je voulais dire des instances de serveur, par conséquent chaque serveur essayera de se connecter à DB en même temps. Et je n'ai pas le contrôle d'une instance de serveur de l'autre, pour les étrangler. Sry pour l'erreur que j'ai écrit :(@EssexBoy – tibortru

+0

Quelle base de données utilisez-vous? –

Répondre

2

aide RandomValuePropertySource du printemps

@Scheduled(cron='0 ${random.int[0,30]} 4 * * ?')