Polish "Add support for task executor shutdown related properties"
Closes gh-15951
This commit is contained in:
@@ -22,6 +22,7 @@ import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Shutdown;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.task.TaskExecutorBuilder;
|
||||
import org.springframework.boot.task.TaskExecutorCustomizer;
|
||||
@@ -74,10 +75,10 @@ public class TaskExecutionAutoConfiguration {
|
||||
builder = builder.maxPoolSize(pool.getMaxSize());
|
||||
builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
|
||||
builder = builder.keepAlive(pool.getKeepAlive());
|
||||
Shutdown shutdown = this.properties.getShutdown();
|
||||
builder = builder.awaitTermination(shutdown.isAwaitTermination());
|
||||
builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
|
||||
builder = builder.threadNamePrefix(this.properties.getThreadNamePrefix());
|
||||
builder = builder.awaitTermination(this.properties.getAwaitTermination());
|
||||
builder = builder.waitForTasksToCompleteOnShutdown(
|
||||
this.properties.isWaitForTasksToCompleteOnShutdown());
|
||||
builder = builder.customizers(this.taskExecutorCustomizers);
|
||||
builder = builder.taskDecorator(this.taskDecorator.getIfUnique());
|
||||
return builder;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,10 +17,8 @@
|
||||
package org.springframework.boot.autoconfigure.task;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.convert.DurationUnit;
|
||||
|
||||
/**
|
||||
* Configuration properties for task execution.
|
||||
@@ -34,29 +32,21 @@ public class TaskExecutionProperties {
|
||||
|
||||
private final Pool pool = new Pool();
|
||||
|
||||
private final Shutdown shutdown = new Shutdown();
|
||||
|
||||
/**
|
||||
* Prefix to use for the names of newly created threads.
|
||||
*/
|
||||
private String threadNamePrefix = "task-";
|
||||
|
||||
/**
|
||||
* Maximum number of time that the executor is supposed to block on shutdown waiting
|
||||
* for remaining tasks to complete. This is particularly useful if your remaining
|
||||
* tasks are likely to need access to other resources that are also managed by the
|
||||
* container. If a duration suffix is not specified, seconds will be used.
|
||||
*/
|
||||
@DurationUnit(ChronoUnit.SECONDS)
|
||||
private Duration awaitTermination;
|
||||
|
||||
/**
|
||||
* Whether the executor should wait for scheduled tasks to complete on shutdown.
|
||||
*/
|
||||
private boolean waitForTasksToCompleteOnShutdown = false;
|
||||
|
||||
public Pool getPool() {
|
||||
return this.pool;
|
||||
}
|
||||
|
||||
public Shutdown getShutdown() {
|
||||
return this.shutdown;
|
||||
}
|
||||
|
||||
public String getThreadNamePrefix() {
|
||||
return this.threadNamePrefix;
|
||||
}
|
||||
@@ -65,23 +55,6 @@ public class TaskExecutionProperties {
|
||||
this.threadNamePrefix = threadNamePrefix;
|
||||
}
|
||||
|
||||
public Duration getAwaitTermination() {
|
||||
return this.awaitTermination;
|
||||
}
|
||||
|
||||
public void setAwaitTermination(Duration awaitTermination) {
|
||||
this.awaitTermination = awaitTermination;
|
||||
}
|
||||
|
||||
public boolean isWaitForTasksToCompleteOnShutdown() {
|
||||
return this.waitForTasksToCompleteOnShutdown;
|
||||
}
|
||||
|
||||
public void setWaitForTasksToCompleteOnShutdown(
|
||||
boolean waitForTasksToCompleteOnShutdown) {
|
||||
this.waitForTasksToCompleteOnShutdown = waitForTasksToCompleteOnShutdown;
|
||||
}
|
||||
|
||||
public static class Pool {
|
||||
|
||||
/**
|
||||
@@ -155,4 +128,34 @@ public class TaskExecutionProperties {
|
||||
|
||||
}
|
||||
|
||||
public static class Shutdown {
|
||||
|
||||
/**
|
||||
* Whether the executor should wait for scheduled tasks to complete on shutdown.
|
||||
*/
|
||||
private boolean awaitTermination;
|
||||
|
||||
/**
|
||||
* Maximum time the executor should wait for remaining tasks to complete.
|
||||
*/
|
||||
private Duration awaitTerminationPeriod;
|
||||
|
||||
public boolean isAwaitTermination() {
|
||||
return this.awaitTermination;
|
||||
}
|
||||
|
||||
public void setAwaitTermination(boolean awaitTermination) {
|
||||
this.awaitTermination = awaitTermination;
|
||||
}
|
||||
|
||||
public Duration getAwaitTerminationPeriod() {
|
||||
return this.awaitTerminationPeriod;
|
||||
}
|
||||
|
||||
public void setAwaitTerminationPeriod(Duration awaitTerminationPeriod) {
|
||||
this.awaitTerminationPeriod = awaitTerminationPeriod;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -63,15 +63,15 @@ public class TaskExecutionAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void taskExecutorBuilderShouldApplyCustomSettings() {
|
||||
this.contextRunner.withPropertyValues(
|
||||
"spring.task.execution.pool.queue-capacity=10",
|
||||
"spring.task.execution.pool.core-size=2",
|
||||
"spring.task.execution.pool.max-size=4",
|
||||
"spring.task.execution.pool.allow-core-thread-timeout=true",
|
||||
"spring.task.execution.pool.keep-alive=5s",
|
||||
"spring.task.execution.thread-name-prefix=mytest-",
|
||||
"spring.task.execution.await-termination=30s",
|
||||
"spring.task.execution.wait-for-tasks-to-complete-on-shutdown=true")
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.task.execution.pool.queue-capacity=10",
|
||||
"spring.task.execution.pool.core-size=2",
|
||||
"spring.task.execution.pool.max-size=4",
|
||||
"spring.task.execution.pool.allow-core-thread-timeout=true",
|
||||
"spring.task.execution.pool.keep-alive=5s",
|
||||
"spring.task.execution.shutdown.await-termination=true",
|
||||
"spring.task.execution.shutdown.await-termination-period=30s",
|
||||
"spring.task.execution.thread-name-prefix=mytest-")
|
||||
.run(assertTaskExecutor((taskExecutor) -> {
|
||||
assertThat(taskExecutor).hasFieldOrPropertyWithValue("queueCapacity",
|
||||
10);
|
||||
@@ -80,11 +80,11 @@ public class TaskExecutionAutoConfigurationTests {
|
||||
assertThat(taskExecutor)
|
||||
.hasFieldOrPropertyWithValue("allowCoreThreadTimeOut", true);
|
||||
assertThat(taskExecutor.getKeepAliveSeconds()).isEqualTo(5);
|
||||
assertThat(taskExecutor.getThreadNamePrefix()).isEqualTo("mytest-");
|
||||
assertThat(taskExecutor)
|
||||
.hasFieldOrPropertyWithValue("awaitTerminationSeconds", 30);
|
||||
assertThat(taskExecutor).hasFieldOrPropertyWithValue(
|
||||
"waitForTasksToCompleteOnShutdown", true);
|
||||
assertThat(taskExecutor)
|
||||
.hasFieldOrPropertyWithValue("awaitTerminationSeconds", 30);
|
||||
assertThat(taskExecutor.getThreadNamePrefix()).isEqualTo("mytest-");
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user