2016-05-23 1 views
1

Je tente de gérer les tâches planifiées à l'aide du démarrage par ressort. Je veux exécuter mon travail seulement une fois à une date particulière (spécifiée par l'utilisateur). Voici mon emploi:Spring Boot: exécution d'un travail à une date particulière entrée par l'utilisateur

@Component 
public class JobScheduler{ 

    @Autowired 
    JobController controller; 
    // Retrieving the Date entered by the user 
    controller.getDateForExecution(); // 2016/05/24 10:00 for example 

    @Scheduled(???) 
    public void performJob() throws Exception { 
     controller.doSomething(); 
    } 

Il y a plusieurs options pour l'annotation planifiée tels que fixedDelay, fixedRate, initialDelay, ... mais Cron aucun d'entre eux peuvent accepter une date. Alors, comment puis-je exécuter dynamiquement ma méthode à la Date spécifiée (ie en fonction de la Date insérée)?

Ps: La méthode peut être exécutée plus d'une fois si l'utilisateur entre deux ou plusieurs dates ..

Répondre

1

printemps a l'abstraction TaskScheduler que vous pouvez utiliser: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-task-scheduler

Il a une méthode pour planifier l'exécution d'un Runnable à un certain Date:

ScheduledFuture schedule(Runnable task, Date startTime); 

un peu hors-sujet peut-être: Si JobController est un ressort Controller (ou RestController), Je ne l'aurais pas autowire dans le JobScheduler. Je voudrais l'inverse et injecter le JobScheduler dans le JobController.