현재 스프링 부트 액추에이터 "상태"끝점을 사용하여 구현 된 상태 모니터링 프레임 워크로 작업하고 있습니다. Actuator 인프라 스트럭처는 맞춤형 건강 검진의 생성을 지원하고 내장 된 건강 검진을 제공합니다. 이 중 하나는 DataSourceHealthIndicator
입니다.기본 DataSourceHealthIndicator 비활성화 및 바꾸기
DataSourceHealthIndicator
은 org.springframework.boot.actuate.health
패키지의 일부이며 현재 데이터 소스의 상태를 확인하기 위해 Health 프레임 워크에서 사용 중입니다. DataSourceHealthIndicator
의 약간 수정 된 버전을 사용하고 "기본값"을 비활성화해야합니다.
나는 제안 된 해결책을 시도했다 here 및 here, 운 없음으로. 나는 무엇을 잘못 할 수 있 었는가?
감사합니다.
편집 :
@Bean
public HealthIndicator dbHealthIndicator() {
return new dbHealthIndicator();
}
: 2016년 8월 18일, 동부 표준시 오후 3시 38분
나는 내 구성 클래스에 다음 dbHealthIndicator
에 내 콩의 이름을 변경하고 추가 한 지금 다음 예외가 발생합니다 :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataAccessMapperFactory' defined in class path resource [udtContext.xml]
java.lang.RuntimeException: java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException
편집 : 2016년 8월 19일는,이 도움이 될 수 동부 표준시 오전 9시 22분
은 내가 뭘하려고 오전 보여합니다. 현재 내 /health
엔드 포인트는 다음과 같다 뭔가를 반환
dataSource: {
status: "UP",
database: "mySql",
hello: "hello"
}
더 "결과"옆에있는 정수가 내 데이터베이스에 저장 프로 시저에 의해 반환 된 상태 코드입니다이 같은 뭔가를 반환 할 싶습니다 :
private void doDataSourceHealthCheck(Health.Builder builder) throws Exception {
String product = getProduct();
builder.up().withDetail("database", product);
String validationQuery = getValidationQuery(product);
if (StringUtils.hasText(validationQuery)) {
try {
// Avoid calling getObject as it breaks MySQL on Java 7
List<Object> results = this.jdbcTemplate.query(validationQuery,
new SingleColumnRowMapper());
Object result = DataAccessUtils.requiredSingleResult(results);
builder.withDetail("hello", result);
}
catch (Exception ex) {
builder.down(ex);
}
}
}
I 대구 8 개 라인을 추가해야
dataSource: {
status: "UP",
database: "mySql",
hello: "hello",
result: 0
}
이 체크를 수행 DataSourceHealthIndicator.java
의 방법은 e를 builder.withDetail("hello", result);
아래에서 호출하여 저장된 프로 시저에 대한 호출을 수행합니다. 나는 기본 클래스를 "디 컴파일"하고 싶지 않고 private이기 때문에이 메서드를 재정의 할 수 없다. 나는 내 자신의 bean에 DataSourceHealthIndicator.java
코드를 복사하고, 코드를 추가하고,이 버전을 대신 사용하도록 Spring을 재구성 할 수 있다고 생각했지만, 이것이 가능한지 모르겠습니다.
왜 당신이 당신의 자신의 필요합니까'HealthIndicator' 당신이 시도하고 그것을 무엇인가 그렇게하지 않으면 작동하지 않습니다/원래 하나의 기능? –
M. Deinum, 내 데이터베이스의 저장 프로 시저를 호출하기 위해 내장 DataSourceHealthIndicator에서 doDataSourceHealthCheck() 메서드를 재정의하거나 확장하고 싶습니다. 그러나 Java는 개인 메소드의 대체 또는 확장을 지원하지 않습니다. 그래서, 내가 한 것은 DataSourceHealthIndicator를 복사하고 사용자 정의 빈에 약 8 줄의 코드를 추가하는 것입니다. 이 기본값 대신 "확장 된"버전을 사용하고 싶습니다. 이것이 가능한지 아십니까? – keharris
하지만 기본 정보를 비활성화 하시겠습니까, 아니면이 추가 정보입니까? 너의 것은 작동하지 않을 것이고 나는 너 자신의 구현에서 autowiring을 사용하려고 노력할 것으로 기대한다. 그것은 작동하지 않을 것이다. 원래의 상태 표시기 (constructor에 의해 전달 된대로'DataSource'가 전달됨)를 살펴보십시오. 이것을 구성해야합니다. 그러나 당신이 기존의 것을 당신의 것과 바꾸고 싶지는 않을 것입니다. 나는 둘 다 원한다고 생각합니다. –