상태 점검을 위해 특정 데이터 소스를 모니터링하지 않음
SpringBoot Actuator에 의한 특정 데이터 소스 모니터링을 비활성화할 수 있는 방법이 있는지 알고 싶습니다.
시나리오:One Microservice는 3개의 데이터 소스를 사용하지만 비즈니스상의 이유로 Spring Boot Health Indicator를 통해 모니터링할 필요가 없습니다.
하나의 특정 데이터 소스에 대한 모니터링을 비활성화하는 방법은 무엇입니까?
미리 감사 드려요
후안 안토니오
이 속성으로 수행할 수 있는 기본 데이터 소스 상태 표시기를 비활성화해야 합니다.
management.health.db.enabled=false
그런 다음 관심 있는 데이터 소스만 다루는 자체 상태 지표를 구성합니다. 다음과 같은 것이 있습니다.
@Autowired
private DataSource dataSourceA;
@Autowired
private DataSource dataSourceB;
@Bean
public DataSourceHealthIndicator dataSourceHealthIndicatorA() {
return new DataSourceHealthIndicator(dataSourceA);
}
@Bean
public DataSourceHealthIndicator dataSourceHealthIndicatorB() {
return new DataSourceHealthIndicator(dataSourceB);
}
또는 확장하여 자체 '복수 데이터 소스 상태 표시기'를 작성합니다.AbstractHealthIndicator
그리고 그것에 주입하는 것은 오직.Datasources
모니터링에 관심이 있습니다.유형의 모든 봄 콩HealthIndicator
자동으로 에 등록됩니다.health
작동기는 스프링이 당신의 사용자 정의를 만들도록 내버려두면 됩니다.HealthIndicator
작동기에 의해 노출될 것입니다.
배경의 경우 Spring에서 기본 데이터 소스 상태 점검을 구성하는 방법을 확인할 수 있습니다.org.springframework.boot.actuate.autoconfigure.DataSourcesHealthIndicatorConfiguration
.
Spring Boot 2 이후에는 상태 점검에서 데이터 소스를 필터링할 수 있습니다. 우선 순위를 수행할 수 있습니다.org.springframework.boot.actuate.autoconfigure.jdbcDataSourceHealthIndicatorAutoConfiguration
아래 예제에서는 풀 이름이 없는 데이터 소스가 필터링됩니다.
@Configuration
public class YourDataSourceHealthIndicatorAutoConfiguration extends DataSourceHealthIndicatorAutoConfiguration {
public NonMigrationDataSourceHealthIndicatorAutoConfiguration(Map<String, DataSource> dataSources, ObjectProvider<DataSourcePoolMetadataProvider> metadataProviders) {
// Filter out datasources without a pool name
super(filterDataSources(dataSources), metadataProviders);
}
private static Map<String, DataSource> filterDataSources(Map<String, DataSource> dataSources) {
return dataSources.entrySet().stream()
.filter(dataSourceEntry -> {
if (dataSourceEntry.getValue() instanceof HikariDataSource) {
HikariDataSource hikariDataSource = (HikariDataSource) dataSourceEntry.getValue();
return hikariDataSource.getPoolName() != null;
} else {
return true;
}
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
}
가장 쉬운 방법은 다음과 같습니다.
@Configuration
public class DatasourceHealthCheckConfig extends DataSourceHealthContributorAutoConfiguration {
public DatasourceHealthCheckConfig(Map<String, DataSource> dataSources, ObjectProvider<DataSourcePoolMetadataProvider> metadataProviders) {
super(dataSources, metadataProviders);
}
@Override
public HealthContributor dbHealthContributor(Map<String, DataSource> dataSources) {
// remove the required datasource from the dataSources map by its name
return super.dbHealthContributor(dataSources);
}
}
Spring Boot 2.1.2용 솔루션.상태를 비활성화하려면 특정 데이터 소스만 확인하십시오.좀 부끄럽지만, 저를 위해 일했습니다.
@Configuration
public class DatasourceHealthCheckConfig extends DataSourceHealthIndicatorAutoConfiguration {
public DatasourceHealthCheckConfig(ObjectProvider<Map<String, DataSource>> dataSources,
ObjectProvider<DataSourcePoolMetadataProvider> metadataProviders) {
super(filterDataSources(dataSources), metadataProviders);
}
private static ObjectProvider<Map<String, DataSource>> filterDataSources(ObjectProvider<Map<String, DataSource>> dataSources) {
final Map<String, DataSource> map = dataSources.getObject();
map.remove("specificDataSource"); // name of datasource for removal
return new ObjectProvider<>() {
@Override
public Map<String, DataSource> getObject(Object... args) throws BeansException {
return map;
}
@Override
public Map<String, DataSource> getIfAvailable() throws BeansException {
return map;
}
@Override
public Map<String, DataSource> getIfUnique() throws BeansException {
return map;
}
@Override
public Map<String, DataSource> getObject() throws BeansException {
return map;
}
};
}
}
언급URL : https://stackoverflow.com/questions/46746784/not-monitor-a-specific-datasource-for-health-check
'prosource' 카테고리의 다른 글
함수에서 "항상 __sub__((항상_sub)"은 무엇을 의미합니까? (0) | 2023.07.22 |
---|---|
JMS 메시지가 사용될 때까지 스프링 컨텍스트 유지 (0) | 2023.07.22 |
python에서 stdout을 "nothing"으로 리디렉션 (0) | 2023.07.22 |
Rest Controller의 모범 사례는 무엇입니까? (0) | 2023.07.22 |
여러 자식 컨텍스트가 있는 스프링 부트 응용 프로그램 만들기 (0) | 2023.07.22 |