Skip to content

Commit

Permalink
Only consider current context when finding lifecycle processor
Browse files Browse the repository at this point in the history
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
  • Loading branch information
wilkinsona committed Jun 19, 2020
1 parent 28643e4 commit 1e97ff8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
Expand Up @@ -18,6 +18,7 @@

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;
Expand All @@ -36,7 +37,8 @@
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());
Expand Down
Expand Up @@ -55,6 +55,18 @@ void lifecycleProcessorIsConfiguredWithCustomDefaultTimeout() {
});
}

@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) -> {
Expand Down

0 comments on commit 1e97ff8

Please sign in to comment.