Health endpoint for the Micronaut application

turned on laptop computer
Reading Time: 3 minutes

1. About

Micronaut is an open-source JVM-based software framework for building lightweight, modular applications and microservices. It helps to create microservices with small memory footprints and quick startup time. We will create a Micronaut application using Java. You will learn how to use the Micronaut Management feature to enable your application’s “health” endpoint.

2. Pre-requisite

  • Micronaut
  • Gradle
  • JDK 1.8 or greater installed with JAVA_HOME
  • Enable annotation Processing.
annotation

3. Development

To create a Micronaut project just navigate to https://micronaut.io/launch/ and create your starter project.

Add micronaut management dependency in build.gradle file, So it will expose a /health endpoint.

// Add micronaut management dependency in build.gradle file
implementation("io.micronaut:micronaut-management")

The project structure will be as follows-

The Application.java will be as follows-

package com.example;

import io.micronaut.runtime.Micronaut;

public class Application {
    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}

The HelloController.java will be as follows-

package example.micronaut;

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Produces;

@Controller("/hello") // <1>
public class HelloController {
    @Get 
    @Produces(MediaType.TEXT_PLAIN) 
    public String index() {
        return "Hello Controller called";
    }
}

Configuration of application.yml file will be as follows-

micronaut:
  application:
    name: micronautguide
netty:
  default:
    allocator:
      max-order: 3

The HelloControllerTest will be as follows-

package com.example;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import io.micronaut.http.HttpRequest;
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 jakarta.inject.Inject;

@MicronautTest // <1>
public class HelloControllerTest {

    @Inject
    @Client("/")  // <2>
    HttpClient client;

    @Test
    public void testHello() {
        HttpRequest<String> request = HttpRequest.GET("/hello");  // <3>
        String body = client.toBlocking().retrieve(request);

        assertNotNull(body);
        assertEquals("Hello World", body);
    }
}

The HelloControllerTest will be as follows-

package com.example;

import io.micronaut.runtime.EmbeddedApplication;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;

import jakarta.inject.Inject;

@MicronautTest
class MicronautguideTest {

    @Inject
    EmbeddedApplication<?> application;

    @Test
    void testItWorks() {
        Assertions.assertTrue(application.isRunning());
    }
}

Create HealthPathTest test file

  1. Sets the base path for all management endpoints to /endpoints/. It is normally specified in application configuration (e.g. application.yml).
  2. The “health” endpoint is now rooted to /endpoints/health.
  3. The “health” endpoint is no longer accessible on the default path and results in a “Not Found” status (HTTP 404).

Create HealthTest test file

  1. Annotate HealthTest class with @MicronautTest so the Micronaut framework will initialize the application context and the embedded server.
  2. Inject the HttpClient bean via @Inject and point it to the embedded server.
  3. Health endpoint returns information about the “health” of the application, as determined by any number of “health indicators”.

Create PoorHealthTest test file

  1. Sets the endpoints.health.disk-space.threshold property to an impossibly high value to force a service down status. It is normally specified in the application configuration (e.g. application.yml).
  2. Failed health check result in service unavailable status (HTTP 503).
  3. The error response contains json string {“status”:”DOWN”}

4. Work Flow

Run Application.java class

Open the terminal and execute the health endpoint via curl localhost:8080/health

Testing the Application

Run the tests via cmd ./gradlew test
Then goto build/reports/tests/test/index.html and open in a browser to see the results.

If any test get failed

5. Conclusion

In this blog, we have covered Exposing a Health point for the Micronaut application. Now you are ready with the understanding of Exposing a Health point for the Micronaut application. For more, you can refer to the documentation: https://blog.knoldus.com/micornaut-data-jpa-hibernate/

Written by 

Gaurav Dubey is a Java Developer at Knoldus Software LLP. He has done M.CA from Kurukshetra University and completed Bachelor's Degree in Computer Science from M. D. University. He is a tech enthusiast with good knowledge of Java. He is majorly focused in Java practice. On the personal front, he loves to cook and travel.

Discover more from Knoldus Blogs

Subscribe now to keep reading and get access to the full archive.

Continue reading