diff --git a/buildSrc/src/main/java/io/spring/start/SpringBootStarterActuator.java b/buildSrc/src/main/java/io/spring/start/SpringBootStarterActuator.java new file mode 100644 index 0000000000..6fe506d11f --- /dev/null +++ b/buildSrc/src/main/java/io/spring/start/SpringBootStarterActuator.java @@ -0,0 +1,56 @@ +/* + * Copyright 2017-2023 original 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 io.spring.start; + +import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.application.generator.GeneratorContext; +import jakarta.inject.Singleton; +import io.micronaut.starter.build.dependencies.Dependency; +import static io.spring.start.SpringBootDependencies.GROUP_ID_ORG_SPRINGFRAMEWORK_BOOT; + +@Singleton +public class SpringBootStarterActuator implements SpringBootStarterFeature { + public static final String NAME = "spring-boot-starter-actuator"; + public static final String ARTIFACT_ID_SPRING_BOOT_STARTER_ACTUATOR = "spring-boot-starter-actuator"; + + public static final Dependency.Builder DEPENDENCY_SPRINGBOOT_STARTER_ACTUATOR = Dependency.builder() + .groupId(GROUP_ID_ORG_SPRINGFRAMEWORK_BOOT) + .artifactId(ARTIFACT_ID_SPRING_BOOT_STARTER_ACTUATOR) + .compile(); + + @Override + @NonNull + public String getName() { + return NAME; + } + + @Override + public String getTitle() { + return "Spring Starter Actuator"; + } + + @Override + @NonNull + public String getDescription() { + return "Additional features to help you monitor and manage your application"; + } + + @Override + public void apply(GeneratorContext generatorContext) { + generatorContext.addDependency(DEPENDENCY_SPRINGBOOT_STARTER_ACTUATOR); + } + +} diff --git a/guides/spring-boot-to-micronaut-actuator/metadata.json b/guides/spring-boot-to-micronaut-actuator/metadata.json new file mode 100644 index 0000000000..e6ca4c33bf --- /dev/null +++ b/guides/spring-boot-to-micronaut-actuator/metadata.json @@ -0,0 +1,21 @@ +{ + "title": "Health Endpoint - Spring Boot to Micronaut Framework", + "intro": "This guide shows compares how to exposes a Health endpoint in a Spring Boot application vs a Micronaut Framework application.", + "authors": ["Sergio del Amo"], + "tags": ["spring-boot"], + "categories": ["Spring Boot to Micronaut Framework"], + "publicationDate": "2023-07-24", + "languages": ["java"], + "apps": [ + { + "framework": "Spring Boot", + "testFramework": "junit", + "name": "springboot", + "features": ["spring-boot-starter-web", "spring-boot-starter-actuator"] + }, + { + "name": "micronautframework", + "features": ["management"] + } + ] +} diff --git a/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/main/resources/application.properties b/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/main/resources/application.properties new file mode 100644 index 0000000000..1fd8e41fe7 --- /dev/null +++ b/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/main/resources/application.properties @@ -0,0 +1,4 @@ +micronaut.application.name=micronautguide +#tag::endpointsallpath[] +endpoints.all.path=/actuator +#end::endpointsallpath[] diff --git a/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/test/java/example/micronaut/HealthTest.java b/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/test/java/example/micronaut/HealthTest.java new file mode 100644 index 0000000000..76c9c71fa9 --- /dev/null +++ b/guides/spring-boot-to-micronaut-actuator/micronautframework/java/src/test/java/example/micronaut/HealthTest.java @@ -0,0 +1,28 @@ +package example.micronaut; + +import io.micronaut.http.HttpResponse; +import io.micronaut.http.HttpStatus; +import io.micronaut.http.client.BlockingHttpClient; +import io.micronaut.http.client.HttpClient; +import io.micronaut.http.client.annotation.Client; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import org.junit.jupiter.api.Test; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +@MicronautTest +class HealthTest { + @Test + void healthEndpointReturnsOkAndStatusUp(@Client("/") HttpClient httpClient) { + BlockingHttpClient client = httpClient.toBlocking(); + String url = "/actuator/health"; + HttpResponse response = client.exchange(url, String.class); + assertEquals(HttpStatus.OK, response.getStatus()); + Optional jsonOptional = response.getBody(); + assertTrue(jsonOptional.isPresent()); + String json = jsonOptional.get(); + assertNotNull(json); + assertEquals("{\"status\":\"UP\"}", json); + } +} diff --git a/guides/spring-boot-to-micronaut-actuator/spring-boot-to-micronaut-actuator.adoc b/guides/spring-boot-to-micronaut-actuator/spring-boot-to-micronaut-actuator.adoc new file mode 100644 index 0000000000..7762f9f77f --- /dev/null +++ b/guides/spring-boot-to-micronaut-actuator/spring-boot-to-micronaut-actuator.adoc @@ -0,0 +1,17 @@ +common:header-top.adoc[] + +== Sample Project + +You can link:@sourceDir@.zip[download a sample application] with the code examples shown in this article. + +== Introduction + + + +== Next steps + +Read more about https://micronaut-projects.github.io/micronaut-spring/latest/guide/[Micronaut Spring]. + +common:helpWithMicronaut.adoc[] + + diff --git a/guides/spring-boot-to-micronaut-actuator/springboot/java/src/test/java/example/micronaut/HealthTest.java b/guides/spring-boot-to-micronaut-actuator/springboot/java/src/test/java/example/micronaut/HealthTest.java new file mode 100644 index 0000000000..3e5a32fb59 --- /dev/null +++ b/guides/spring-boot-to-micronaut-actuator/springboot/java/src/test/java/example/micronaut/HealthTest.java @@ -0,0 +1,26 @@ +package example.micronaut; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class HealthTest { + @Autowired + private TestRestTemplate client; + + @Test + void healthEndpointReturnsOkAndStatusUp() { + String url = "/actuator/health"; + ResponseEntity response = client.getForEntity(url, String.class); + assertEquals(HttpStatus.OK, response.getStatusCode()); + String json = response.getBody(); + assertNotNull(json); + assertEquals("{\"status\":\"UP\"}", json); + } +}