J'ai fait un @Service
classe dans l'application Spring Boot avec l'une des méthodes devant s'exécuter de manière asynchrone. Comme je lis la méthode devrait être @Async
annoté et je dois aussi exécuter un bean TaskExecutor
. Mais dans le manuel de printemps http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html Je ne trouve aucune information ni exemple d'utilisation de TaskExecutor
avec annotation, sans configuration XML. Est-il possible de créer TaskExecutor
bean dans Spring Boot sans XML, avec uniquement des annotations? Voici ma classe de service:
@Service
public class CatalogPageServiceImpl implements CatalogPageService {
@Override
public void processPagesList(List<CatalogPage> catalogPageList) {
for (CatalogPage catalogPage:catalogPageList){
processPage(catalogPage);
}
}
@Override
@Async("locationPageExecutor")
public void processPage(CatalogPage catalogPage) {
System.out.println("print from Async method "+catalogPage.getUrl());
}
}
Ajouter un @Bean
méthode à votre classe d'application Spring Boot:
@SpringBootApplication
@EnableAsync
public class MySpringBootApp {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
return executor;
}
public static void main(String[] args) {
// ...
}
}
Reportez-vous à la section Configuration du conteneur Java dans la documentation de référence de Spring Framework pour savoir comment configurer Spring à l'aide de Java config au lieu de XML.).
(Remarque: vous n'avez pas besoin d'ajouter @Configuration
à la classe parce que @SpringBootApplication
comprend déjà @Configuration
).
Tout d’abord - examinons les règles - @Async a deux limitations:
Donc, votre méthode processPage () doit être dans une classe séparée