club.zhcs.lina.starter.monitor.MonitorAutoConfiguration Maven / Gradle / Ivy
package club.zhcs.lina.starter.monitor;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceUnwrapper;
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import club.zhcs.lina.starter.monitor.filter.ActuatorFilter;
import club.zhcs.lina.starter.monitor.health.ChainHealthIndicator;
import club.zhcs.lina.starter.monitor.health.HealthChecker;
import club.zhcs.lina.starter.monitor.metrics.druid.DruidDataSourcePoolMetadata;
import club.zhcs.lina.starter.monitor.metrics.druid.DruidMetrics;
import club.zhcs.lina.starter.monitor.metrics.http.PoolingHttpClientConnectionManagerMetricsBinder;
import jakarta.servlet.Filter;
import lombok.RequiredArgsConstructor;
/**
* @author Kerbores([email protected])
*
*/
@AutoConfiguration
@RequiredArgsConstructor
@EnableConfigurationProperties(MonitorConfigurationProperties.class)
public class MonitorAutoConfiguration {
private final MonitorConfigurationProperties config;
private static final String DATASOURCE_SUFFIX = "dataSource";
@Bean
@ConditionalOnBean(DruidDataSource.class)
@ConditionalOnExpression("${lina.monitor.druid.enabled:false}")
DataSourcePoolMetadataProvider dataSourcePoolMetadataProvider() {
return dataSource -> {
DruidDataSource druidDataSource = DataSourceUnwrapper.unwrap(dataSource, DruidDataSource.class);
if (druidDataSource != null) {
return new DruidDataSourcePoolMetadata(druidDataSource);
}
return null;
};
}
@Bean
@ConditionalOnBean(DruidDataSource.class)
@ConditionalOnClass(StatFilter.class)
@ConditionalOnExpression("${lina.monitor.druid.enabled:false}")
@ConditionalOnMissingBean
StatFilter statFilter() {
return new StatFilter();
}
@Bean
@ConditionalOnBean(DruidDataSource.class)
@ConditionalOnExpression("${lina.monitor.druid.enabled:false}")
DruidMetrics druidMetrics(ObjectProvider
© 2015 - 2025 Weber Informatics LLC | Privacy Policy