Browse Source

Improve null-safety of module/spring-boot-actuator-autoconfigure

See gh-46926
pull/46973/head
Moritz Halbritter 4 months ago
parent
commit
2e09df4e1a
  1. 11
      module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/availability/AvailabilityProbesHealthEndpointGroups.java
  2. 8
      module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java
  3. 2
      module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/AccessLogCustomizer.java
  4. 17
      module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ChildManagementContextInitializer.java

11
module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/availability/AvailabilityProbesHealthEndpointGroups.java

@ -122,7 +122,11 @@ class AvailabilityProbesHealthEndpointGroups implements HealthEndpointGroups, Ad @@ -122,7 +122,11 @@ class AvailabilityProbesHealthEndpointGroups implements HealthEndpointGroups, Ad
}
List<String> additionalPaths = new ArrayList<>();
if (this.groups instanceof AdditionalPathsMapper additionalPathsMapper) {
additionalPaths.addAll(additionalPathsMapper.getAdditionalPaths(endpointId, webServerNamespace));
List<String> mappedAdditionalPaths = getAdditionalPaths(endpointId, webServerNamespace,
additionalPathsMapper);
if (mappedAdditionalPaths != null) {
additionalPaths.addAll(mappedAdditionalPaths);
}
}
additionalPaths.addAll(this.probeGroups.values()
.stream()
@ -134,4 +138,9 @@ class AvailabilityProbesHealthEndpointGroups implements HealthEndpointGroups, Ad @@ -134,4 +138,9 @@ class AvailabilityProbesHealthEndpointGroups implements HealthEndpointGroups, Ad
return additionalPaths;
}
private static @Nullable List<String> getAdditionalPaths(EndpointId endpointId,
WebServerNamespace webServerNamespace, AdditionalPathsMapper additionalPathsMapper) {
return additionalPathsMapper.getAdditionalPaths(endpointId, webServerNamespace);
}
}

8
module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java

@ -63,7 +63,7 @@ public class ConditionsReportEndpoint { @@ -63,7 +63,7 @@ public class ConditionsReportEndpoint {
@ReadOperation
public ConditionsDescriptor conditions() {
Map<String, ContextConditionsDescriptor> contextConditionEvaluations = new HashMap<>();
Map<@Nullable String, ContextConditionsDescriptor> contextConditionEvaluations = new HashMap<>();
ConfigurableApplicationContext target = this.context;
while (target != null) {
contextConditionEvaluations.put(target.getId(), new ContextConditionsDescriptor(target));
@ -85,13 +85,13 @@ public class ConditionsReportEndpoint { @@ -85,13 +85,13 @@ public class ConditionsReportEndpoint {
*/
public static final class ConditionsDescriptor implements OperationResponseBody {
private final Map<String, ContextConditionsDescriptor> contexts;
private final Map<@Nullable String, ContextConditionsDescriptor> contexts;
private ConditionsDescriptor(Map<String, ContextConditionsDescriptor> contexts) {
private ConditionsDescriptor(Map<@Nullable String, ContextConditionsDescriptor> contexts) {
this.contexts = contexts;
}
public Map<String, ContextConditionsDescriptor> getContexts() {
public Map<@Nullable String, ContextConditionsDescriptor> getContexts() {
return this.contexts;
}

2
module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/AccessLogCustomizer.java

@ -21,6 +21,7 @@ import org.jspecify.annotations.Nullable; @@ -21,6 +21,7 @@ import org.jspecify.annotations.Nullable;
import org.springframework.boot.web.server.WebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.core.Ordered;
import org.springframework.lang.Contract;
/**
* Base class for a {@link WebServerFactoryCustomizer} that customizes the web server's
@ -39,6 +40,7 @@ public abstract class AccessLogCustomizer<T extends WebServerFactory> @@ -39,6 +40,7 @@ public abstract class AccessLogCustomizer<T extends WebServerFactory>
this.prefix = prefix;
}
@Contract("!null -> !null")
protected @Nullable String customizePrefix(@Nullable String existingPrefix) {
if (this.prefix == null) {
return existingPrefix;

17
module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ChildManagementContextInitializer.java

@ -85,32 +85,35 @@ class ChildManagementContextInitializer implements BeanRegistrationAotProcessor, @@ -85,32 +85,35 @@ class ChildManagementContextInitializer implements BeanRegistrationAotProcessor,
if (!(this.parentContext instanceof WebServerApplicationContext)) {
return;
}
if (this.managementContext == null) {
ConfigurableApplicationContext managementContext = createManagementContext();
ConfigurableApplicationContext managementContext = this.managementContext;
if (managementContext == null) {
managementContext = createManagementContext();
registerBeans(managementContext);
managementContext.refresh();
this.managementContext = managementContext;
}
else {
this.managementContext.start();
managementContext.start();
}
}
@Override
public void stop() {
if (this.managementContext != null) {
ConfigurableApplicationContext managementContext = this.managementContext;
if (managementContext != null) {
if (this.parentContext.isClosed()) {
this.managementContext.close();
managementContext.close();
}
else {
this.managementContext.stop();
managementContext.stop();
}
}
}
@Override
public boolean isRunning() {
return this.managementContext != null && this.managementContext.isRunning();
ConfigurableApplicationContext managementContext = this.managementContext;
return managementContext != null && managementContext.isRunning();
}
@Override

Loading…
Cancel
Save