GH-371 - Disable waiting for termination defaulting on Spring Framework 6.1.
We now skip the defaulting to wait of the pool shutdown termination on Spring Framework 6.1, as on that, pools implement Lifecycle and we need to wait for complete shutdown during Lifecycle.stop() already and setting the flag would delay that wait to the actual destruction phase.
This commit is contained in:
@@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.task.TaskExecutionProperties;
|
||||
import org.springframework.boot.autoconfigure.task.TaskExecutionProperties.Shutdown;
|
||||
import org.springframework.context.Lifecycle;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.Role;
|
||||
@@ -44,6 +45,7 @@ import org.springframework.modulith.events.support.CompletionRegisteringAdvisor;
|
||||
import org.springframework.modulith.events.support.PersistentApplicationEventMulticaster;
|
||||
import org.springframework.scheduling.annotation.AbstractAsyncConfiguration;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
/**
|
||||
* Fundamental configuration for the {@link EventPublicationRegistry} support.
|
||||
@@ -100,6 +102,9 @@ public class EventPublicationAutoConfiguration extends EventPublicationConfigura
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AsyncPropertiesDefaulter.class);
|
||||
private static final String PROPERTY = "spring.task.execution.shutdown.await-termination";
|
||||
|
||||
private static final boolean IS_SPRING_6_1_OR_BETTER = Lifecycle.class
|
||||
.isAssignableFrom(ThreadPoolTaskExecutor.class);
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
AsyncPropertiesDefaulter(Environment environment) {
|
||||
@@ -114,6 +119,10 @@ public class EventPublicationAutoConfiguration extends EventPublicationConfigura
|
||||
@Override
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||
|
||||
if (IS_SPRING_6_1_OR_BETTER) {
|
||||
return bean;
|
||||
}
|
||||
|
||||
if (!(bean instanceof TaskExecutionProperties p)) {
|
||||
return bean;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.springframework.boot.test.context.assertj.AssertableApplicationContex
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
import org.springframework.context.annotation.AdviceMode;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.modulith.events.CompletedEventPublications;
|
||||
import org.springframework.modulith.events.IncompleteEventPublications;
|
||||
import org.springframework.modulith.events.config.EventPublicationAutoConfiguration.AsyncPropertiesDefaulter;
|
||||
@@ -55,17 +56,16 @@ class EventPublicationAutoConfigurationIntegrationTests {
|
||||
|
||||
@Mock EventPublicationRepository repository;
|
||||
|
||||
@Test // GH-149
|
||||
void registersAsyncTerminationDefaulterByDefault() {
|
||||
@Test // GH-149, GH-371
|
||||
void doesNotRegisterAsyncTerminationDefaulterByDefault() {
|
||||
|
||||
basicSetup()
|
||||
.run(context -> {
|
||||
assertThat(context).hasSingleBean(AsyncPropertiesDefaulter.class);
|
||||
basicSetup().run(context -> {
|
||||
|
||||
expect(Shutdown::isAwaitTermination, true).andThen(
|
||||
expect(Shutdown::getAwaitTerminationPeriod, Duration.ofSeconds(2)))
|
||||
.accept(context);
|
||||
});
|
||||
assertThat(context).hasSingleBean(AsyncPropertiesDefaulter.class);
|
||||
|
||||
expect(Shutdown::isAwaitTermination, false);
|
||||
expect(Shutdown::getAwaitTerminationPeriod, null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test // GH-149
|
||||
@@ -137,8 +137,8 @@ class EventPublicationAutoConfigurationIntegrationTests {
|
||||
});
|
||||
}
|
||||
|
||||
private <T> ContextConsumer<AssertableApplicationContext> expect(Function<Shutdown, T> extractor,
|
||||
T expected) {
|
||||
private static <T> ContextConsumer<AssertableApplicationContext> expect(Function<Shutdown, T> extractor,
|
||||
@Nullable T expected) {
|
||||
|
||||
return context -> assertThat(context.getBean(TaskExecutionProperties.class).getShutdown())
|
||||
.extracting(extractor)
|
||||
|
||||
Reference in New Issue
Block a user