J'ai déclaré ThreadPoolTaskExecutor comme @Bean selon mon contexte d'application comme:Dois-je avoir un ThreadPoolTaskExecutor singleton pour partager différents services?
@Configuration
@ConfigurationProperties(prefix = "application")
@EnableCaching
public class ApplicationConfig {
private static final int POOL_SIZE = 2;
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
pool.setCorePoolSize(POOL_SIZE);
return pool;
}
}
J'ai 2 services différents qui ont besoin de se câblé une instance de ThreadPoolTaskExecutor. Chaque service soumettra un Runnable qui effectuera un travail spécifique au service.
Par exemple, ce sont les 2 services:
@Service
public class TerminatedContractsService {
@Autowired
private ThreadPoolTaskExecutor taskExec;
public void notifyTerminatedContracts(Date d) {
// do some contract specific work
taskExec.submit(() -> System.out.println("emailing terminated contracts..."));
}
}
@Service
public class SalaryCalculationService {
@Autowired
private ThreadPoolTaskExecutor taskExec;
public void calculateSalary(Date d) {
// do some salary related work
taskExec.submit(() -> System.out.println("calculating salaries..."));
}
}
Est doit être sûr de partager la même instance de ThreadPoolTaskExecutor (depuis sa singleton) pour les bons services?
Prévoyez-vous des problèmes avec cela et si je devrais prototype à la place?
Je vois, merci d'avoir souligné les conséquences sur les performances. –