Allow custom availability states

Create a general purpose `AvailabilityState` interface and refactor
the existing `LivenessState` and `ReadinessState` to use it. A single
`AvailabilityChangeEvent` is now used to carry all availability state
updates.

This commit also renames `ApplicationAvailabilityProvider` to
`ApplicationAvailabilityBean` and extracts an `ApplicationAvailability`
interface that other beans can inject. The helps to hide the event
listener method, which is really internal.

Finally the state enums have been renamed as follows:

 - `LivenessState.LIVE` -> `LivenessState.CORRECT`
 - `ReadinessState.READY` -> `ReadinessState.ACCEPTING_TRAFFIC`
 - `ReadinessState.UNREADY` -> `ReadinessState.REFUSING_TRAFFIC`

See gh-20962
This commit is contained in:
Phillip Webb
2020-04-09 16:04:25 -07:00
parent 473d4fd73d
commit bb79c847b2
26 changed files with 561 additions and 369 deletions

View File

@@ -16,13 +16,13 @@
package org.springframework.boot.autoconfigure.availability;
import org.springframework.boot.availability.ApplicationAvailabilityProvider;
import org.springframework.boot.availability.ApplicationAvailabilityBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration} for
* {@link ApplicationAvailabilityProvider}.
* {@link ApplicationAvailabilityBean}.
*
* @author Brian Clozel
* @since 2.3.0
@@ -31,8 +31,8 @@ import org.springframework.context.annotation.Configuration;
public class ApplicationAvailabilityAutoConfiguration {
@Bean
public ApplicationAvailabilityProvider applicationAvailabilityProvider() {
return new ApplicationAvailabilityProvider();
public ApplicationAvailabilityBean applicationAvailability() {
return new ApplicationAvailabilityBean();
}
}

View File

@@ -20,7 +20,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration;
import org.springframework.boot.availability.ApplicationAvailabilityProvider;
import org.springframework.boot.availability.ApplicationAvailability;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import static org.assertj.core.api.Assertions.assertThat;
@@ -37,7 +37,7 @@ class ApplicationAvailabilityAutoConfigurationTests {
@Test
void providerIsPresent() {
this.contextRunner.run(((context) -> assertThat(context).hasSingleBean(ApplicationAvailabilityProvider.class)));
this.contextRunner.run(((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class)));
}
}