복붙노트

[SPRING] 어떻게 봄 부트 건강의 정의 건강 검진을 추가?

SPRING

어떻게 봄 부트 건강의 정의 건강 검진을 추가?

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

이 응용 프로그램에 몇 가지 유용한 엔드 포인트를 추가합니다. 그 중 하나는 / 건강이다. 응용 프로그램을 시작하고 / 건강 엔드 포인트로 이동하면 당신은 이미 일부 데이터를 반환 볼 수 있습니다.

{
    "status":"UP",
    "diskSpace": {
        "status":"UP",
        "free":56443746,
        "threshold":1345660
    }
}

어떻게 봄 부트 건강의 정의 건강 검진을 추가?

해결법

  1. ==============================

    1.사용자 정의 상태 검사를 추가하는 것은 간단합니다. 다만, 새로운 자바 클래스를 생성 AbstractHealthIndicator에서 그것을 확장하고 doHealthCheck 방법을 구현한다. 이 방법은 몇 가지 유용한 방법으로 전달 된 빌더를 가져옵니다. 그렇지 않은 경우는 () 당신의 건강은 OK 또는 builder.down 경우) (builder.up 호출합니다. 당신이 건강을 확인하는 일은 전적으로 귀하이다. 아마 당신은 몇 가지 서버를 ping 또는 일부 파일을 확인하시기 바랍니다.

    사용자 정의 상태 검사를 추가하는 것은 간단합니다. 다만, 새로운 자바 클래스를 생성 AbstractHealthIndicator에서 그것을 확장하고 doHealthCheck 방법을 구현한다. 이 방법은 몇 가지 유용한 방법으로 전달 된 빌더를 가져옵니다. 그렇지 않은 경우는 () 당신의 건강은 OK 또는 builder.down 경우) (builder.up 호출합니다. 당신이 건강을 확인하는 일은 전적으로 귀하이다. 아마 당신은 몇 가지 서버를 ping 또는 일부 파일을 확인하시기 바랍니다.

    @Component
    public class CustomHealthCheck extends AbstractHealthIndicator {
        @Override
        protected void doHealthCheck(Health.Builder bldr) throws Exception {
            // TODO implement some check
            boolean running = true;
            if (running) {
              bldr.up();
            } else {
              bldr.down();
            }
        }
    }
    

    이 새로운 건강 체크 (확인 @ComponentScan 응용 프로그램에) 활성화에 충분하다. 응용 프로그램을 다시 시작하고 / 건강 엔드 포인트에 브라우저를 찾아 당신은 새로 추가 된 건강 검진을 볼 수 있습니다.

    {
        "status":"UP",
        "CustomHealthCheck": {
            "status":"UP"
        },
        "diskSpace": {
            "status":"UP",
            "free":56443746,
            "threshold":1345660
        }
    }
    
  2. ==============================

    2.봄 부팅 2.X 크게 액추에이터를 변경했습니다. 기존 엔드 포인트를 확장하는 새로운, 더 나은 메커니즘은 @EndpointWebExtension를 통해 사용할 수 있습니다.

    봄 부팅 2.X 크게 액추에이터를 변경했습니다. 기존 엔드 포인트를 확장하는 새로운, 더 나은 메커니즘은 @EndpointWebExtension를 통해 사용할 수 있습니다.

    즉 건강 포인트가 하나 개의 확장이 액츄에이터 자체 박스에서 제공되기 때문에 확장 비트 까다, 상기된다. 콩 초기화 프로세스를 조작하지 않으면, 응용 프로그램은이 확장을 볼 수 있기 때문에 시작할 수 없습니다 선택되는 하나 이해하지 않습니다. 쉬운 방법 대신 정보를 사용하고 확장하는 것입니다 :

    @Component
    @EndpointWebExtension(endpoint = InfoEndpoint.class)
    public class InfoWebEndpointExtension {
       @Value("${info.build.version}")
       private String versionNumber;
       @Value("${git.commit.id}")
       private String gitCommit;
       @Value("${info.build.name}")
       private String applicationName;
       ...
       @ReadOperation
       public WebEndpointResponse<Map> info() {
    

    당신은 또한 URL을 다시 매핑 할 수 있다는 것을 잊지 마십시오. 내 경우에는 내가 경로에 / / 건강 / 상태를 선호 / 액츄에이터를 원하지 않는다 :

    management.endpoints.web.base-path=/
    management.endpoints.web.path-mapping.info=status
    

    내가 / 건강 기본값이 중첩 된 구조를하지 않기 때문에 내가 / 정보를 선호하는 또 다른 이유는 다음과 같습니다

    {
    "status": {
        "status": "ON",
    
  3. ==============================

    3.봄 부팅 2.X 이후

    봄 부팅 2.X 이후

    액추에이터의 개념은 봄 부팅 2.X에서 변경했지만 여전히 HealthIndicator을 구현하거나 반응 응용 프로그램 ReactiveHealthIndicator을 위해 쉽게 사용자 정의 상태 검사를 추가 할 수 있습니다 yuranos87 @에서 언급 한 바와 같이 :

    @Component
    public class CacheHealthIndicator implements HealthIndicator {
    
    @Override
    public Health health() {
        long result = checkSomething())           
        if (result <= 0) {
            return Health.down().withDetail("Something Result", result).build();
        }
        return Health.up().build();      
    }
    

    또는

    @Component
    public class CacheHealthIndicator implements ReactiveHealthIndicator {
    
    @Override
    public Mono<Health> health() {
        return Mono.fromCallable(() -> checkSomething())
            .map(result -> {
                if (result <= 0) {
                    return Health.down().withDetail("Something Result", result).build();
                }
                return Health.up().build();
            });
       }
    }
    

    또한 추가하거나 @Endpointor @EndpointWebExtension있는 모든 엔드 포인트를 확장 할 수 있습니다. 여기에 끝점은 정보, 건강과 더 많은입니다. 그래서 당신은 @Endpoint를 사용하여 사용자 지정 상태 검사를 추가 할 수 있지만 HealthIndicator 함께 할 훨씬 쉽게입니다.

    당신은 봄 부트 문서에 사용자 정의 상태 검사 및 사용자 정의 엔드 포인트에 대한 자세한 정보를 찾을 수 있습니다.

  4. from https://stackoverflow.com/questions/44849568/how-to-add-a-custom-health-check-in-spring-boot-health by cc-by-sa and MIT license