diff --git a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/CustomStatusCodeMapper.java b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/CustomStatusCodeMapper.java index 0ff6773240..483c21dfc1 100644 --- a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/CustomStatusCodeMapper.java +++ b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/CustomStatusCodeMapper.java @@ -21,6 +21,10 @@ public class CustomStatusCodeMapper implements HttpCodeStatusMapper { return 500; } + if (status.getCode().equals("WARNING")) { + return 500; + } + return 200; } } diff --git a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/RandomHealthIndicator.java b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/RandomHealthIndicator.java index 958f173458..d8b27c7865 100644 --- a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/RandomHealthIndicator.java +++ b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/RandomHealthIndicator.java @@ -1,5 +1,6 @@ package com.baeldung.health; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @@ -9,6 +10,7 @@ import java.util.Map; import java.util.concurrent.ThreadLocalRandom; @Component +@ConditionalOnEnabledHealthIndicator("random") public class RandomHealthIndicator implements HealthIndicator { @Override diff --git a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/WarningHealthIndicator.java b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/WarningHealthIndicator.java new file mode 100644 index 0000000000..d978d90339 --- /dev/null +++ b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/health/WarningHealthIndicator.java @@ -0,0 +1,14 @@ +package com.baeldung.health; + +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.stereotype.Component; + +@Component +public class WarningHealthIndicator implements HealthIndicator { + + @Override + public Health health() { + return Health.status("WARNING").build(); + } +} diff --git a/spring-boot-modules/spring-boot-actuator/src/main/resources/application.properties b/spring-boot-modules/spring-boot-actuator/src/main/resources/application.properties index 290221b731..27dba985b8 100644 --- a/spring-boot-modules/spring-boot-actuator/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot-actuator/src/main/resources/application.properties @@ -1,5 +1,5 @@ management.health.probes.enabled=true management.endpoint.health.show-details=always -management.health.random.enabled=false management.endpoint.health.status.http-mapping.down=500 -management.endpoint.health.status.http-mapping.out_of_service=503 \ No newline at end of file +management.endpoint.health.status.http-mapping.out_of_service=503 +management.endpoint.health.status.http-mapping.warning=500 \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/DisabledRandomHealthIndicatorIntegrationTest.java b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/DisabledRandomHealthIndicatorIntegrationTest.java new file mode 100644 index 0000000000..b69e7fd1f8 --- /dev/null +++ b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/DisabledRandomHealthIndicatorIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.health; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +@TestPropertySource(properties = "management.health.random.enabled=false") +class DisabledRandomHealthIndicatorIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @Test + void givenADisabledIndicator_whenSendingRequest_thenReturns404() throws Exception { + mockMvc.perform(get("/actuator/health/random")) + .andExpect(status().isNotFound()); + } +} diff --git a/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/RandomHealthIndicatorIntegrationTest.java b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/RandomHealthIndicatorIntegrationTest.java new file mode 100644 index 0000000000..dba38d4da3 --- /dev/null +++ b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/RandomHealthIndicatorIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.health; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + +@SpringBootTest +@AutoConfigureMockMvc +class RandomHealthIndicatorIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @Test + void givenRandomIndicator_whenCallingTheAPI_thenReturnsExpectedDetails() throws Exception { + mockMvc.perform(get("/actuator/health/random")) + .andExpect(jsonPath("$.status").exists()) + .andExpect(jsonPath("$.details.strategy").value("thread-local")) + .andExpect(jsonPath("$.details.chance").exists()); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/WarningHealthIndicatorIntegrationTest.java b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/WarningHealthIndicatorIntegrationTest.java new file mode 100644 index 0000000000..60d11a00c7 --- /dev/null +++ b/spring-boot-modules/spring-boot-actuator/src/test/java/com/baeldung/health/WarningHealthIndicatorIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.health; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +class WarningHealthIndicatorIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @Test + void givenCustomMapping_whenCallingTheAPI_thenTheStatusCodeIsAsExpected() throws Exception { + mockMvc.perform(get("/actuator/health/warning")) + .andExpect(jsonPath("$.status").value("WARNING")) + .andExpect(status().isInternalServerError()); + } +} \ No newline at end of file