2017-07-13 1 views
1

J'ai une application serveur spring-boot. Dans l'une des fonctions que je lance des discussions programmées:Exécution d'une méthode en classe après le démarrage de l'application spring-boot

private ScheduledExecutorService pool = Executors.newScheduledThreadPool(10); 
    private threadsNumber = 10; 

    @PostConstruct 
    void startThreads() { 
      for (int i = 1; i <= threadsNumber; ++i){ 
       pool.scheduleAtFixedRate(new Runnable() { 
        @Override 
        public void run() { 
          //set Thread Local in depends on i 
          // do some other stuff 

         } 
        } 
       }, 0, 10, TimeUnit.SECONDS); 
      } 
     } 
    } 
} 

La question est:
Comment en annotation éviter printemps-démarrage @PostConstruct et obtenir un résultat: « exécuter exactement une fois après l'application à partir »

+0

exécuter votre code dans le constructeur. spring va lancer le bean et vous pouvez exécuter votre planificateur – pandaadb

Répondre

0

Spring fournit l'interface ApplicationListener<ContextRefreshedEvent> et son crochet onApplicationEvent(ContextRefreshedEvent event).

Par exemple:

public abstract class MyServiceCreationListener implements ApplicationListener<ContextRefreshedEvent> { 

    @Override 
    public void onApplicationEvent(ContextRefreshedEvent event) { 
     // do something on container startup 
    } 
}