Only apply awaitTerminationPeriod if awaitTermination is set

See gh-38528
This commit is contained in:
Moritz Halbritter 2023-11-30 10:29:12 +01:00
parent 6744cc2887
commit fdbd65a2f5
2 changed files with 7 additions and 5 deletions

View File

@ -21,7 +21,6 @@ import java.util.concurrent.Executor;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading; import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading;
import org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Shutdown;
import org.springframework.boot.autoconfigure.thread.Threading; import org.springframework.boot.autoconfigure.thread.Threading;
import org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; import org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder;
import org.springframework.boot.task.SimpleAsyncTaskExecutorCustomizer; import org.springframework.boot.task.SimpleAsyncTaskExecutorCustomizer;
@ -92,7 +91,7 @@ class TaskExecutorConfigurations {
builder = builder.maxPoolSize(pool.getMaxSize()); builder = builder.maxPoolSize(pool.getMaxSize());
builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout()); builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
builder = builder.keepAlive(pool.getKeepAlive()); builder = builder.keepAlive(pool.getKeepAlive());
Shutdown shutdown = properties.getShutdown(); TaskExecutionProperties.Shutdown shutdown = properties.getShutdown();
builder = builder.awaitTermination(shutdown.isAwaitTermination()); builder = builder.awaitTermination(shutdown.isAwaitTermination());
builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod()); builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
builder = builder.threadNamePrefix(properties.getThreadNamePrefix()); builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
@ -120,7 +119,7 @@ class TaskExecutorConfigurations {
builder = builder.maxPoolSize(pool.getMaxSize()); builder = builder.maxPoolSize(pool.getMaxSize());
builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout()); builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
builder = builder.keepAlive(pool.getKeepAlive()); builder = builder.keepAlive(pool.getKeepAlive());
Shutdown shutdown = properties.getShutdown(); TaskExecutionProperties.Shutdown shutdown = properties.getShutdown();
builder = builder.awaitTermination(shutdown.isAwaitTermination()); builder = builder.awaitTermination(shutdown.isAwaitTermination());
builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod()); builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
builder = builder.threadNamePrefix(properties.getThreadNamePrefix()); builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
@ -177,8 +176,10 @@ class TaskExecutorConfigurations {
builder = builder.taskDecorator(this.taskDecorator.getIfUnique()); builder = builder.taskDecorator(this.taskDecorator.getIfUnique());
TaskExecutionProperties.Simple simple = this.properties.getSimple(); TaskExecutionProperties.Simple simple = this.properties.getSimple();
builder = builder.concurrencyLimit(simple.getConcurrencyLimit()); builder = builder.concurrencyLimit(simple.getConcurrencyLimit());
Shutdown shutdown = this.properties.getShutdown(); TaskExecutionProperties.Shutdown shutdown = this.properties.getShutdown();
builder = builder.taskTerminationTimeout(shutdown.getAwaitTerminationPeriod()); if (shutdown.isAwaitTermination()) {
builder = builder.taskTerminationTimeout(shutdown.getAwaitTerminationPeriod());
}
return builder; return builder;
} }

View File

@ -113,6 +113,7 @@ class TaskExecutionAutoConfigurationTests {
this.contextRunner this.contextRunner
.withPropertyValues("spring.task.execution.thread-name-prefix=mytest-", .withPropertyValues("spring.task.execution.thread-name-prefix=mytest-",
"spring.task.execution.simple.concurrency-limit=1", "spring.task.execution.simple.concurrency-limit=1",
"spring.task.execution.shutdown.await-termination=true",
"spring.task.execution.shutdown.await-termination-period=30s") "spring.task.execution.shutdown.await-termination-period=30s")
.run(assertSimpleAsyncTaskExecutor((taskExecutor) -> { .run(assertSimpleAsyncTaskExecutor((taskExecutor) -> {
assertThat(taskExecutor.getConcurrencyLimit()).isEqualTo(1); assertThat(taskExecutor.getConcurrencyLimit()).isEqualTo(1);