2016-08-15 12 views
0

Я использую SpringBoot Actuator для восстановления работоспособности приложения.Spring Boot Actuator - Пользовательская конечная точка работоспособности

public class HealthMonitor implements HealthIndicator { 

    @Override 
    public Health health() { 
     int errorCode = check(); 
     if (errorCode != 0) { 
      return Health.down().withDetail("Error Code", errorCode).build(); 
     } 
     return Health.up().build(); 
    } 

    public int check() { 
     return 0; 
    } 

} 

Я смотрите ниже ответ

{ 
    "status": "UP", 
    "diskSpace": { 
    "status": "UP", 
    "free": 55020113920, 
    "threshold": 10485760 
    }, 
    "db": { 
    "status": "UP", 
    "database": "Oracle", 
    "hello": "Hello" 
    } 
} 

Я хочу, чтобы вернуть ответ, подобный ниже

{status: "Healthy"} 

Есть ли способ сделать это?

+0

Вместо возвращения экземпляра 'Health' вернуть пользовательский ответ после проверки' errorCode' – 11thdimension

+0

Я не должен осуществлять HealthIndicator в этом случае? Есть ли способ вернуть пользовательское сообщение, например, то, что я упомянул, используя экземпляр работоспособности? –

+0

Я думал, что «Здоровье» было нормальным. Я попробовал это сам, только теперь я могу подумать, чтобы защитить эту службу от внешнего использования и создать пользовательский сервис, например, как «/ customHealth», и использовать эту службу «/ health» на сервере для получения информации о состоянии в пользовательском оказание услуг. – 11thdimension

ответ

-2

Существует много гибкости с весенним ботинком и его индикаторами здоровья.

Во-первых, в зависимости от сложности вашего обслуживания вам может не понадобиться указатель HealthIndicator, описанный выше. Из коробки Spring Boot вернет статус «на основе ваших настроек пружины. Это включает в себя базы данных (как SQL, так и некоторые noSQL), Mail, JMS и другие. Это описано в последних Spring загрузочных документов в section 47.6.1

Самый простой способ вернуть то, что вы хотите, с или без класса HealthIndicator, чтобы установить свойство в ваших application.properties:

endpoints.health. sensitive = true

Это может относиться только к более поздним версиям (после 1.4?) Spring Boot.

0

Я не думаю, что вы сможете убедить поставляемую конечную точку здоровья Spring Boot отображаться в совершенно другом формате.

Основная часть исходного кода Spring очень понятна, и это не исключение. Посмотрите на источник для org.springframework.boot.actuate.endpoint.HealthEndpoint, и вы увидите, что у него есть метод invoke(), который возвращает Health. JSON, который вы видите, это сортировка Джексона этого объекта.

Вы можете, однако, создать свою собственную конечную точку, расширяя AbstractEndpoint точно так же, как HealthEndpoint, возвращая любой собственный класс, который вам нравится.

Можно даже сделать его делегировать HealthEndpoint боба:

public MyHealthEndpoint(HealthEndpoint delegate) { 
    this.delegate = delegate; 
} 

@Override 
public MyHealth invoke() { 
     Health health = delegate.invoke(); 
     return new MyHealth(health.getStatus()); 
} 
Смежные вопросы