Skip to content

Commit 3ca1e91

Browse files
philwebbwilkinsona
authored andcommitted
Create spring-boot-health module
Closes gh-46155
1 parent 3ecbbce commit 3ca1e91

File tree

310 files changed

+4560
-2761
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

310 files changed

+4560
-2761
lines changed

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ include "spring-boot-project:spring-boot-gson"
9595
include "spring-boot-project:spring-boot-h2console"
9696
include "spring-boot-project:spring-boot-hateoas"
9797
include "spring-boot-project:spring-boot-hazelcast"
98+
include "spring-boot-project:spring-boot-health"
9899
include "spring-boot-project:spring-boot-hibernate"
99100
include "spring-boot-project:spring-boot-http-client"
100101
include "spring-boot-project:spring-boot-http-converter"

spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ description = "Spring Boot Actuator AutoConfigure"
2828
dependencies {
2929
api(project(":spring-boot-project:spring-boot-actuator"))
3030
api(project(":spring-boot-project:spring-boot-autoconfigure"))
31-
31+
3232
implementation("com.fasterxml.jackson.core:jackson-databind")
3333
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
3434

35+
optional(project(":spring-boot-project:spring-boot-health"))
3536
optional(project(":spring-boot-project:spring-boot-web-server"))
3637

3738
optional("com.fasterxml.jackson.core:jackson-databind")

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/availability/AvailabilityHealthContributorAutoConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2424
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2728
import org.springframework.boot.availability.ApplicationAvailability;
29+
import org.springframework.boot.health.contributor.Health;
2830
import org.springframework.context.annotation.Bean;
2931

3032
/**
@@ -35,6 +37,7 @@
3537
* @since 2.3.2
3638
*/
3739
@AutoConfiguration(after = ApplicationAvailabilityAutoConfiguration.class)
40+
@ConditionalOnClass(Health.class)
3841
public class AvailabilityHealthContributorAutoConfiguration {
3942

4043
@Bean

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/availability/AvailabilityProbesAutoConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration;
2424
import org.springframework.boot.autoconfigure.condition.ConditionMessage;
2525
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2728
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
2829
import org.springframework.boot.availability.ApplicationAvailability;
2930
import org.springframework.boot.cloud.CloudPlatform;
31+
import org.springframework.boot.health.contributor.Health;
3032
import org.springframework.context.annotation.Bean;
3133
import org.springframework.context.annotation.ConditionContext;
3234
import org.springframework.context.annotation.Conditional;
@@ -42,6 +44,7 @@
4244
*/
4345
@AutoConfiguration(after = { AvailabilityHealthContributorAutoConfiguration.class,
4446
ApplicationAvailabilityAutoConfiguration.class })
47+
@ConditionalOnClass(Health.class)
4548
@Conditional(AvailabilityProbesAutoConfiguration.ProbesCondition.class)
4649
public class AvailabilityProbesAutoConfiguration {
4750

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.endpoint.jackson;
1818

19+
import java.util.HashSet;
20+
import java.util.Set;
21+
1922
import com.fasterxml.jackson.annotation.JsonInclude.Include;
2023
import com.fasterxml.jackson.databind.MapperFeature;
2124
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -28,6 +31,7 @@
2831
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2932
import org.springframework.context.annotation.Bean;
3033
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
34+
import org.springframework.util.ClassUtils;
3135

3236
/**
3337
* {@link EnableAutoConfiguration Auto-configuration} for Endpoint Jackson support.
@@ -39,6 +43,8 @@
3943
@SuppressWarnings("removal")
4044
public class JacksonEndpointAutoConfiguration {
4145

46+
private static final String CONTRIBUTED_HEALTH = "org.springframework.boot.health.contributor.ContributedHealth";
47+
4248
@Bean
4349
@ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-object-mapper", matchIfMissing = true)
4450
@ConditionalOnClass({ ObjectMapper.class, Jackson2ObjectMapperBuilder.class })
@@ -49,7 +55,24 @@ public EndpointObjectMapper endpointObjectMapper() {
4955
SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS)
5056
.serializationInclusion(Include.NON_NULL)
5157
.build();
52-
return () -> objectMapper;
58+
Set<Class<?>> supportedTypes = new HashSet<>(EndpointObjectMapper.DEFAULT_SUPPORTED_TYPES);
59+
if (ClassUtils.isPresent(CONTRIBUTED_HEALTH, null)) {
60+
supportedTypes.add(ClassUtils.resolveClassName(CONTRIBUTED_HEALTH, null));
61+
}
62+
return new EndpointObjectMapper() {
63+
64+
@Override
65+
public ObjectMapper get() {
66+
return objectMapper;
67+
}
68+
69+
@Override
70+
public Set<Class<?>> getSupportedTypes() {
71+
return supportedTypes;
72+
}
73+
74+
};
75+
5376
}
5477

5578
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/AutoConfiguredHealthContributorRegistry.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/AutoConfiguredHealthEndpointGroups.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818

1919
import java.util.ArrayList;
2020
import java.util.Collections;
21-
import java.util.LinkedHashMap;
2221
import java.util.List;
2322
import java.util.Map;
2423
import java.util.Objects;
2524
import java.util.Set;
25+
import java.util.TreeMap;
2626
import java.util.function.Predicate;
2727
import java.util.function.Supplier;
2828
import java.util.stream.Stream;
@@ -93,7 +93,7 @@ class AutoConfiguredHealthEndpointGroups implements HealthEndpointGroups, Additi
9393
private Map<String, HealthEndpointGroup> createGroups(Map<String, Group> groupProperties, BeanFactory beanFactory,
9494
StatusAggregator defaultStatusAggregator, HttpCodeStatusMapper defaultHttpCodeStatusMapper,
9595
Show defaultShowComponents, Show defaultShowDetails, Set<String> defaultRoles) {
96-
Map<String, HealthEndpointGroup> groups = new LinkedHashMap<>();
96+
Map<String, HealthEndpointGroup> groups = new TreeMap<>();
9797
groupProperties.forEach((groupName, group) -> {
9898
Status status = group.getStatus();
9999
Show showComponents = (group.getShowComponents() != null) ? group.getShowComponents()

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/AutoConfiguredReactiveHealthContributorRegistry.java

Lines changed: 0 additions & 55 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright 2012-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.actuate.autoconfigure.health;
18+
19+
import java.util.Collections;
20+
import java.util.Set;
21+
22+
import org.springframework.boot.actuate.health.HealthEndpointGroups;
23+
import org.springframework.boot.health.registry.HealthContributorNameValidator;
24+
import org.springframework.util.Assert;
25+
26+
/**
27+
* {@link HealthContributorNameValidator} to ensure names don't clash with groups.
28+
*
29+
* @author Phillip Webb
30+
*/
31+
class GroupsHealthContributorNameValidator implements HealthContributorNameValidator {
32+
33+
private final Set<String> groupNames;
34+
35+
GroupsHealthContributorNameValidator(HealthEndpointGroups groups) {
36+
this.groupNames = (groups != null) ? groups.getNames() : Collections.emptySet();
37+
}
38+
39+
@Override
40+
public void validate(String name) throws IllegalStateException {
41+
Assert.state(!this.groupNames.contains(name),
42+
() -> "HealthContributor with name \"" + name + "\" clashes with group");
43+
}
44+
45+
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
import org.springframework.boot.actuate.health.HealthEndpoint;
2121
import org.springframework.boot.autoconfigure.AutoConfiguration;
2222
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2325
import org.springframework.boot.context.properties.EnableConfigurationProperties;
26+
import org.springframework.boot.health.contributor.Health;
2427
import org.springframework.context.annotation.Import;
2528

2629
/**
@@ -32,11 +35,14 @@
3235
* @author Scott Frederick
3336
* @since 2.0.0
3437
*/
35-
@AutoConfiguration
38+
@AutoConfiguration(
39+
afterName = "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration")
40+
@ConditionalOnClass(Health.class)
41+
@ConditionalOnBean(type = "org.springframework.boot.health.registry.HealthContributorRegistry")
3642
@ConditionalOnAvailableEndpoint(HealthEndpoint.class)
3743
@EnableConfigurationProperties(HealthEndpointProperties.class)
38-
@Import({ HealthEndpointConfiguration.class, ReactiveHealthEndpointConfiguration.class,
39-
HealthEndpointWebExtensionConfiguration.class, HealthEndpointReactiveWebExtensionConfiguration.class })
44+
@Import({ HealthEndpointConfiguration.class, HealthEndpointWebExtensionConfiguration.class,
45+
HealthEndpointReactiveWebExtensionConfiguration.class })
4046
public class HealthEndpointAutoConfiguration {
4147

4248
}

0 commit comments

Comments
 (0)