Je veux exécuter une classe Java (qui contient un Java que je veux exécuter) après le démarrage du printemps. Mon code initial:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Et voici le code que je veux exécuter au démarrage:
public class SimularProfesor implements Runnable{
// Class atributes
// Constructor
public SimularProfesor() {
//Initialization of atributes
}
@Override
public void run() {
while(true) {
// Do something
}
}
}
Comment puis-je appeler ce fil? Voici ce que je suis censé faire:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// Call thread (constructor must be executed too)
}
}
Ne jouez pas avec les fils vous-même. Spring (et aussi Java simple) a une belle abstraction pour cela.
Créez d'abord un bean du type TaskExecutor
dans votre configuration
@Bean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor(); // Or use another one of your liking
}
Créez ensuite un CommandLineRunner
(bien qu'un ApplicationListener<ContextRefreshedEvent>
fonctionnerait également) pour planifier votre tâche.
@Bean
public CommandLineRunner schedulingRunner(TaskExecutor executor) {
return new CommandLineRunner() {
public void run(String... args) throws Exception {
executor.execute(new SimularProfesor());
}
}
}
Vous pouvez bien sûr également créer votre propre classe gérée au printemps.
L'avantage de cela est que Spring nettoiera également les fils pour vous et vous n'avez pas à y penser vous-même. J'ai utilisé un CommandLineRunner
ici car cela s'exécutera après que tous les beans auront initialisé le bean.