From d31b8687005633a4947d586c993124e1fbe66fb4 Mon Sep 17 00:00:00 2001 From: nbrouand <7816908+nbrouand@users.noreply.github.com> Date: Tue, 29 Nov 2022 17:31:11 +0100 Subject: [PATCH] Remove ConcurentTaskScheduler (See https://github.com/spring-projects/spring-statemachine/pull/1063) --- .../chutneytesting/ServerConfiguration.java | 39 +++++++++++++++++-- .../com/chutneytesting/WebConfiguration.java | 13 +------ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/server/src/main/java/com/chutneytesting/ServerConfiguration.java b/server/src/main/java/com/chutneytesting/ServerConfiguration.java index 58de691d8..69e5f276b 100644 --- a/server/src/main/java/com/chutneytesting/ServerConfiguration.java +++ b/server/src/main/java/com/chutneytesting/ServerConfiguration.java @@ -45,14 +45,18 @@ import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.task.TaskExecutorBuilder; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.support.ExecutorServiceAdapter; +import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @SpringBootApplication(exclude = {LiquibaseAutoConfiguration.class, ActiveMQAutoConfiguration.class, MongoAutoConfiguration.class}) @EnableScheduling @@ -103,23 +107,49 @@ public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { }; } + /** + * Default task scheduler for + * With a default ScheduledExecutorService with a pool size of 1 + */ + @Bean + public TaskScheduler taskScheduler() { + return new ThreadPoolTaskScheduler(); + } + + /** + * Default task executor for @Aync (used for SSE for example) + * With a default with default configuration: org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Pool + */ + @Bean + public TaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) { + return builder.threadNamePrefix("app-task-exec").build(); + } + + /** + * For com.chutneytesting.execution.domain.schedule.CampaignScheduler#executeScheduledCampaigns() + */ @Bean public TaskExecutor scheduleCampaignsExecutor() { return new SimpleAsyncTaskExecutor("schedule-campaigns-executor"); } + /** + * For com.chutneytesting.ServerConfiguration#executionConfiguration() + */ @Bean public TaskExecutor engineExecutor(@Value(ENGINE_THREAD_SPRING_VALUE) Integer threadForEngine) { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(threadForEngine); executor.setMaxPoolSize(threadForEngine); - executor.setThreadNamePrefix("engine-executor"); executor.initialize(); LOGGER.debug("Pool for engine created with size {}", threadForEngine); return executor; } + /** + * For com.chutneytesting.ServerConfiguration#campaignExecutionEngine() + */ @Bean public TaskExecutor campaignExecutor(@Value(CAMPAIGNS_THREAD_SPRING_VALUE) Integer threadForCampaigns) { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); @@ -131,6 +161,9 @@ public TaskExecutor campaignExecutor(@Value(CAMPAIGNS_THREAD_SPRING_VALUE) Integ return executor; } + /** + * For com.chutneytesting.execution.domain.schedule.CampaignScheduler#CampaignScheduler() + */ @Bean public ExecutorService scheduledCampaignsExecutor(@Value(SCHEDULED_CAMPAIGNS_THREAD_SPRING_VALUE) Integer threadForScheduledCampaigns) { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); @@ -145,7 +178,7 @@ public ExecutorService scheduledCampaignsExecutor(@Value(SCHEDULED_CAMPAIGNS_THR @Bean public ExecutionConfiguration executionConfiguration( @Value(ENGINE_REPORTER_PUBLISHER_TTL_SPRING_VALUE) Long reporterTTL, - Executor engineExecutor, + @Qualifier("engineExecutor") TaskExecutor engineExecutor, @Value(TASK_SQL_NB_LOGGED_ROW) String nbLoggedRow, @Value(ENGINE_DELEGATION_USER_SPRING_VALUE) String delegateUser, @Value(ENGINE_DELEGATION_PASSWORD_SPRING_VALUE) String delegatePasword @@ -206,7 +239,7 @@ CampaignExecutionEngine campaignExecutionEngine(CampaignRepository campaignRepos DataSetHistoryRepository dataSetHistoryRepository, JiraXrayEmbeddedApi jiraXrayEmbeddedApi, ChutneyMetrics metrics, - TaskExecutor campaignExecutor, + @Qualifier("campaignExecutor") TaskExecutor campaignExecutor, ObjectMapper objectMapper) { return new CampaignExecutionEngine( campaignRepository, diff --git a/server/src/main/java/com/chutneytesting/WebConfiguration.java b/server/src/main/java/com/chutneytesting/WebConfiguration.java index 5c63bab9d..58e5f21b3 100644 --- a/server/src/main/java/com/chutneytesting/WebConfiguration.java +++ b/server/src/main/java/com/chutneytesting/WebConfiguration.java @@ -19,23 +19,12 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @Configuration public class WebConfiguration { - @Bean - @Primary // Because of https://github.com/spring-projects/spring-boot/issues/20308 - public TaskScheduler taskScheduler() { - return new ConcurrentTaskScheduler(); - } - - @Bean - public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) { - return builder.threadNamePrefix("app-task-exec").build(); - } - @Bean @Primary public ObjectMapper objectMapper() {