Only consider current context when finding lifecycle processor
Previously, LifecycleAutoConfiguration would check the current context and all of its ancestors for a lifecycle processor bean, only configuring a custom processor if one was not found. Every context has a lifecycle processor so this check meant that lifecycle processing timeout could not be customized in any context with a parent. This commit updates the auto-configuration to only check the current context. Closes gh-22014
This commit is contained in:
parent
28643e4d2d
commit
1e97ff834e
|
@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.context;
|
|||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
@ -36,7 +37,8 @@ import org.springframework.context.support.DefaultLifecycleProcessor;
|
|||
public class LifecycleAutoConfiguration {
|
||||
|
||||
@Bean(name = AbstractApplicationContext.LIFECYCLE_PROCESSOR_BEAN_NAME)
|
||||
@ConditionalOnMissingBean(name = AbstractApplicationContext.LIFECYCLE_PROCESSOR_BEAN_NAME)
|
||||
@ConditionalOnMissingBean(name = AbstractApplicationContext.LIFECYCLE_PROCESSOR_BEAN_NAME,
|
||||
search = SearchStrategy.CURRENT)
|
||||
public DefaultLifecycleProcessor defaultLifecycleProcessor(LifecycleProperties properties) {
|
||||
DefaultLifecycleProcessor lifecycleProcessor = new DefaultLifecycleProcessor();
|
||||
lifecycleProcessor.setTimeoutPerShutdownPhase(properties.getTimeoutPerShutdownPhase().toMillis());
|
||||
|
|
|
@ -55,6 +55,18 @@ public class LifecycleAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void lifecycleProcessorIsConfiguredWithCustomDefaultTimeoutInAChildContext() {
|
||||
new ApplicationContextRunner().run((parent) -> {
|
||||
this.contextRunner.withParent(parent).withPropertyValues("spring.lifecycle.timeout-per-shutdown-phase=15s")
|
||||
.run((child) -> {
|
||||
assertThat(child).hasBean(AbstractApplicationContext.LIFECYCLE_PROCESSOR_BEAN_NAME);
|
||||
Object processor = child.getBean(AbstractApplicationContext.LIFECYCLE_PROCESSOR_BEAN_NAME);
|
||||
assertThat(processor).extracting("timeoutPerShutdownPhase").isEqualTo(15000L);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenUserDefinesALifecycleProcessorBeanThenTheAutoConfigurationBacksOff() {
|
||||
this.contextRunner.withUserConfiguration(LifecycleProcessorConfiguration.class).run((context) -> {
|
||||
|
|
Loading…
Reference in New Issue