2017-06-21 2 views
0

Printemps merveilleusement offers un zone attribuer à l'annotation @Scheduled. Je cherche à fournir la méthode @Scheduled avec un fuseau horaire par programmation. Par exemple, disons que je veux allumer les lumières des bâtiments de Los Angeles et de Chicago, tous les deux à minuit heure locale. Je veux récupérer les bâtiments de mon dépôt.Comment ajouter un fuseau horaire à @Scheduled par programmation?

Le fuseau horaire peut-il être fourni lors de l'exécution ou autrement injecté?

Comme:

@Scheduled(cron = "0 0 * * * *", zone = {THE_ZONE}) //midnight 
public void myScheduledMethod() {  
    //...  
    building.toggleLights(); //could be LA or Chicago 
} 

Je sais que la méthode @Scheduled ne peut pas prendre des arguments, fournissant ainsi le fuseau horaire de cette façon ne le fera pas.

+0

Quelque chose comme 'zone =" $ {zone.property} "' devrait faire l'affaire. –

+0

Ne tirerait-il pas d'un fichier .properties? Cela vous dérangerait-il de poster une réponse? Pas sûr que je suis. – bphilipnyc

+0

Non, il utilisera un 'PropertyResolver' qui devrait déléguer à' Environment'. –

Répondre

0

Utilisez simplement une expression de valeur.

@Scheduled(cron = "0 0 * * * *", zone = "${zone.property}") //midnight 
public void myScheduledMethod() { ... } 

Cela utilisera la Environment pour rechercher la propriété nommée zone.property qui peut être défini comme variable d'environnement en lire à partir d'un fichier de propriétés, etc.

Si vous voulez les récupérer, comme vous le dites de la DB, vous devez planifier manuellement les méthodes et ne pas utiliser la méthode @Schedule. Créez un bean qui, au démarrage, lit à partir de la base de données et enregistre les tâches avec un TaskScheduler.

+0

Exactement, donc je devrais aller sur la route du haricot et ne pas utiliser la façon plus simple '@ Scheduled'. Imaginez que vous ayez des centaines de bâtiments dans des centaines de villes ... – bphilipnyc

+0

Ce serait une usine unique qui lirait les horaires d'une base de données et les programmerait. Créez simplement les beans en fonction des informations de la base de données. –