Browse Source
Prior to this commit, the application availability infrastructure would mix the `AvailabilityState`, the `HealthIndicator` and the `HealthGroup` concepts and would not align with the rest. This commit auto-configures the livenessState and readinessState health indicators with the relevant configuration properties. Unlike other indicators, they are not enabled by default but might be in future versions. This also moves the `management.health.probes.enabled` property to `management.endpoint.health.probes.enabled` since "probes" here is not a health indicator but rather a configuration flag for the health endpoint. Finally, the probes auto-configuration is refined to automatically add liveness and readiness indicators for the probes group if they're not already present. Closes gh-22107pull/22996/head
7 changed files with 193 additions and 21 deletions
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
/* |
||||
* Copyright 2012-2020 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.availability; |
||||
|
||||
import org.springframework.boot.actuate.availability.AvailabilityStateHealthIndicator; |
||||
import org.springframework.boot.actuate.availability.LivenessStateHealthIndicator; |
||||
import org.springframework.boot.actuate.availability.ReadinessStateHealthIndicator; |
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
||||
import org.springframework.boot.availability.ApplicationAvailability; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
/** |
||||
* {@link EnableAutoConfiguration Auto-configuration} for |
||||
* {@link AvailabilityStateHealthIndicator}. |
||||
* vailabilityHealthContributorAutoConfigurationTests |
||||
* |
||||
* @author Brian Clozel |
||||
* @since 2.3.2 |
||||
*/ |
||||
@Configuration(proxyBeanMethods = false) |
||||
@AutoConfigureAfter(ApplicationAvailabilityAutoConfiguration.class) |
||||
public class AvailabilityHealthContributorAutoConfiguration { |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean |
||||
@ConditionalOnProperty(prefix = "management.health.livenessstate", name = "enabled", havingValue = "true") |
||||
public LivenessStateHealthIndicator livenessStateHealthIndicator(ApplicationAvailability applicationAvailability) { |
||||
return new LivenessStateHealthIndicator(applicationAvailability); |
||||
} |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean |
||||
@ConditionalOnProperty(prefix = "management.health.readinessstate", name = "enabled", havingValue = "true") |
||||
public ReadinessStateHealthIndicator readinessStateHealthIndicator( |
||||
ApplicationAvailability applicationAvailability) { |
||||
return new ReadinessStateHealthIndicator(applicationAvailability); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
/* |
||||
* Copyright 2012-2020 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.availability; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.boot.actuate.availability.LivenessStateHealthIndicator; |
||||
import org.springframework.boot.actuate.availability.ReadinessStateHealthIndicator; |
||||
import org.springframework.boot.autoconfigure.AutoConfigurations; |
||||
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration; |
||||
import org.springframework.boot.availability.ApplicationAvailability; |
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link AvailabilityHealthContributorAutoConfiguration} |
||||
* |
||||
* @author Brian Clozel |
||||
*/ |
||||
class AvailabilityHealthContributorAutoConfigurationTests { |
||||
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner().withConfiguration(AutoConfigurations |
||||
.of(ApplicationAvailabilityAutoConfiguration.class, AvailabilityHealthContributorAutoConfiguration.class)); |
||||
|
||||
@Test |
||||
void probesWhenNotKubernetesAddsNoBeans() { |
||||
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class) |
||||
.doesNotHaveBean(LivenessStateHealthIndicator.class) |
||||
.doesNotHaveBean(ReadinessStateHealthIndicator.class)); |
||||
} |
||||
|
||||
@Test |
||||
void livenessIndicatorWhenPropertyEnabledAddsBeans() { |
||||
this.contextRunner.withPropertyValues("management.health.livenessState.enabled=true") |
||||
.run((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class) |
||||
.hasSingleBean(LivenessStateHealthIndicator.class) |
||||
.doesNotHaveBean(ReadinessStateHealthIndicator.class)); |
||||
} |
||||
|
||||
@Test |
||||
void readinessIndicatorWhenPropertyEnabledAddsBeans() { |
||||
this.contextRunner.withPropertyValues("management.health.readinessState.enabled=true") |
||||
.run((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class) |
||||
.hasSingleBean(ReadinessStateHealthIndicator.class) |
||||
.doesNotHaveBean(LivenessStateHealthIndicator.class)); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue