RED-8171 : Refactored AsyncConfig to take into account tracing configuration overwrite
This commit is contained in:
parent
faf12716b6
commit
56e5092571
@ -1,29 +0,0 @@
|
||||
package com.knecon.fforesight.tenantcommons;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnClass(AsyncConfigurerSupport.class)
|
||||
public class AsyncConfig extends AsyncConfigurerSupport {
|
||||
|
||||
@Override
|
||||
public Executor getAsyncExecutor() {
|
||||
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
|
||||
executor.setCorePoolSize(7);
|
||||
executor.setMaxPoolSize(42);
|
||||
executor.setQueueCapacity(11);
|
||||
executor.setThreadNamePrefix("TenantAwareTaskExecutor-");
|
||||
executor.setTaskDecorator(new TenantAwareTaskDecorator());
|
||||
executor.initialize();
|
||||
|
||||
return executor;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,9 +1,9 @@
|
||||
package com.knecon.fforesight.tenantcommons;
|
||||
|
||||
import org.springframework.core.task.TaskDecorator;
|
||||
import com.knecon.fforesight.tenantcommons.task.KneconTaskDecorator;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
public class TenantAwareTaskDecorator implements TaskDecorator {
|
||||
public class TenantAwareTaskDecorator implements KneconTaskDecorator {
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
package com.knecon.fforesight.tenantcommons.task;
|
||||
|
||||
import org.springframework.core.task.TaskDecorator;
|
||||
|
||||
// Marker interface
|
||||
public interface KneconTaskDecorator extends TaskDecorator {
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.knecon.fforesight.tenantcommons.task;
|
||||
|
||||
import com.knecon.fforesight.tenantcommons.TenantAwareTaskDecorator;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class TaskDecoratorConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public KneconTaskDecorator tenantAwareTaskDecorator() {
|
||||
|
||||
return new TenantAwareTaskDecorator();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package com.knecon.fforesight.tenantcommons.task;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@PropertySource("classpath:tenant-commons-task.properties")
|
||||
@ConditionalOnProperty(prefix = "management.tracing", name = "enabled", havingValue = "false")
|
||||
public class TaskExecutionConfiguration {
|
||||
}
|
||||
10
src/main/resources/tenant-commons-task.properties
Normal file
10
src/main/resources/tenant-commons-task.properties
Normal file
@ -0,0 +1,10 @@
|
||||
#
|
||||
# Configure task executor specs
|
||||
#
|
||||
# For more available props,
|
||||
# see: https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java
|
||||
#
|
||||
spring.task.execution.pool.coreSize=7
|
||||
spring.task.execution.pool.maxSize=42
|
||||
spring.task.execution.pool.queueCapacity=11
|
||||
spring.task.execution.threadNamePrefix=TenantAwareTaskExecutor-
|
||||
@ -0,0 +1,71 @@
|
||||
package com.knecon.fforesight.tenantcommons;
|
||||
|
||||
import com.knecon.fforesight.tenantcommons.task.TaskDecoratorConfiguration;
|
||||
import com.knecon.fforesight.tenantcommons.task.TaskExecutionConfiguration;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import lombok.val;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
|
||||
@Slf4j
|
||||
public class TaskExecutionTest {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(TaskExecutionAutoConfiguration.class))
|
||||
.withUserConfiguration(TaskDecoratorConfiguration.class, TaskExecutionConfiguration.class);
|
||||
|
||||
|
||||
@Test
|
||||
public void taskAsyncWithTracingDisabledTest() {
|
||||
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.tracing.enabled=false")
|
||||
.run(context -> {
|
||||
val taskExecutor = context.getBean(AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME);
|
||||
|
||||
assertThat(taskExecutor).isNotNull();
|
||||
assertThat(taskExecutor).isInstanceOf(ThreadPoolTaskExecutor.class);
|
||||
if (taskExecutor instanceof ThreadPoolTaskExecutor threadPoolTaskExecutor) {
|
||||
assertThat(threadPoolTaskExecutor.getCorePoolSize()).isEqualTo(7);
|
||||
assertThat(threadPoolTaskExecutor.getMaxPoolSize()).isEqualTo(42);
|
||||
assertThat(threadPoolTaskExecutor.getQueueCapacity()).isEqualTo(11);
|
||||
assertThat(threadPoolTaskExecutor.getThreadNamePrefix()).isEqualTo("TenantAwareTaskExecutor-");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void taskDecoratorWithTracingDisabledTest() {
|
||||
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.tracing.enabled=false")
|
||||
.run(context -> {
|
||||
val tenantAwareTaskDecoratorBean = context.getBean("tenantAwareTaskDecorator");
|
||||
|
||||
assertThat(tenantAwareTaskDecoratorBean).isNotNull();
|
||||
assertThat(tenantAwareTaskDecoratorBean).isInstanceOf(TenantAwareTaskDecorator.class);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void taskDecoratorWithTracingEnabledTest() {
|
||||
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.tracing.enabled=true")
|
||||
.run(context -> {
|
||||
val tenantAwareTaskDecoratorBean = context.getBean("tenantAwareTaskDecorator");
|
||||
|
||||
assertThat(tenantAwareTaskDecoratorBean).isNotNull();
|
||||
assertThat(tenantAwareTaskDecoratorBean).isInstanceOf(TenantAwareTaskDecorator.class);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user