springboot 配置Druid多數據源監控

springboot配置文件配置如下:

# 數據源一

spring.datasource.ky_data.name=ky_data-db
spring.datasource.ky_data.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_data.url= jdbc:mysql://127.0.0.1:3306/ky_data?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_data.username= root
spring.datasource.ky_data.password= 123456
spring.datasource.ky_data.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_data.filters=stat,wall,log4j
spring.datasource.ky_data.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_data.logSlowSql=true

# 數據源二

spring.datasource.ky_user.name=user-db
spring.datasource.ky_user.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_user.url= jdbc:mysql://127.0.0.1:3306/ky_user_notice?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_user.username= root
spring.datasource.ky_user.password= 123456
spring.datasource.ky_user.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_user.filters=stat,wall,log4j
spring.datasource.ky_user.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_user.logSlowSql=true

# 數據源三

spring.datasource.ky_order.name=order-db
spring.datasource.ky_order.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_order.url= jdbc:mysql://127.0.0.1:3306/ky_order?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_order.username= root
spring.datasource.ky_order.password= 123456
spring.datasource.ky_order.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_order.filters=stat,wall,log4j
spring.datasource.ky_order.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_order.logSlowSql=true
 

# druid監控 登錄信息
druid.monitor.loginUsername=admin
druid.monitor.loginPassword=admin
 

編寫KyDataDBConfig類,如下

@Data
@Configuration("kyDataDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_data")
public class KyDataDBConfig {

    private String name;
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    //private int initialSize;
    //private int minIdle;
    //private int maxActive;
    //private int maxWait;
    //private int timeBetweenEvictionRunsMillis;
    //private int minEvictableIdleTimeMillis;
    private String validationQuery;
    //private boolean testWhileIdle;
    //private boolean testOnBorrow;
    //private boolean testOnReturn;
    //private boolean poolPreparedStatements;
    //private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String logSlowSql;
    //private String connectionProperties;
    //private boolean useGlobalDataSourceStat;
}

編寫KyOrderDBConfig類,如下

@Data
@Configuration("kyOrderDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_order")
public class KyOrderDBConfig {
    private String name;
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    //private int initialSize;
    //private int minIdle;
    //private int maxActive;
    //private int maxWait;
    //private int timeBetweenEvictionRunsMillis;
    //private int minEvictableIdleTimeMillis;
    private String validationQuery;
    //private boolean testWhileIdle;
    //private boolean testOnBorrow;
    //private boolean testOnReturn;
    //private boolean poolPreparedStatements;
    //private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String logSlowSql;
    //private String connectionProperties;
    //private boolean useGlobalDataSourceStat;
}

編寫KyUserDBConfig類,如下:

@Data
@Configuration("kyUserDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_user")
public class KyUserDBConfig {
    private String name;
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    //private int initialSize;
    //private int minIdle;
    //private int maxActive;
    //private int maxWait;
    //private int timeBetweenEvictionRunsMillis;
    //private int minEvictableIdleTimeMillis;
    private String validationQuery;
    //private boolean testWhileIdle;
    //private boolean testOnBorrow;
    //private boolean testOnReturn;
    //private boolean poolPreparedStatements;
    //private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String logSlowSql;
    //private String connectionProperties;
    //private boolean useGlobalDataSourceStat;
}

編寫ManyDataSourceConfig類,如下:

@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class ManyDataSourceConfig {

    private static final Logger logger = LoggerFactory.getLogger(ManyDataSourceConfig.class);

    public static final String DATA_SOURCE_KY_DATA = "kyDataDataSource";
    public static final String DATA_SOURCE_KY_USER = "kyUserDataSource";
    public static final String DATA_SOURCE_KY_ORDER = "kyOrderDataSource";


    @Bean(name = DATA_SOURCE_KY_DATA)
    @Qualifier(DATA_SOURCE_KY_DATA)
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.ky_data")
    public DataSource kyDataDataSource(@Qualifier("kyDataDBConfig") KyDataDBConfig db) {
        //return DataSourceBuilder.create().build();
        // 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
        final DruidDataSource datasource = new DruidDataSource();
        datasource.setName(db.getName());
        datasource.setUrl(db.getUrl());
        datasource.setUsername(db.getUsername());
        datasource.setPassword(db.getPassword());
        datasource.setDriverClassName(db.getDriverClassName());
        //datasource.setInitialSize(db.getInitialSize());
        //datasource.setMinIdle(db.getMinIdle());
        //datasource.setMaxActive(db.getMaxActive());
        //datasource.setMaxWait(db.getMaxWait());
        //datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
        //datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
        //datasource.setValidationQuery(db.getValidationQuery());
        //datasource.setTestOnReturn(db.isTestOnReturn());
        //datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
        //datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
        //datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
        try {
            datasource.setFilters(db.getFilters());
        } catch (SQLException e) {
            logger.error("setFilters Exception : ", e);
        }
        //datasource.setConnectionProperties(db.getConnectionProperties());
        datasource.setValidationQuery(db.getValidationQuery());
        return datasource;
    }

    @Bean(name = DATA_SOURCE_KY_USER)
    @Qualifier(DATA_SOURCE_KY_USER)
    @ConfigurationProperties(prefix = "spring.datasource.ky_user")
    public DataSource kyUserDataSource(@Qualifier("kyUserDBConfig") KyUserDBConfig db) {
        //return DataSourceBuilder.create().build();
        // 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
        final DruidDataSource datasource = new DruidDataSource();
        datasource.setName(db.getName());
        datasource.setUrl(db.getUrl());
        datasource.setUsername(db.getUsername());
        datasource.setPassword(db.getPassword());
        datasource.setDriverClassName(db.getDriverClassName());
        //datasource.setInitialSize(db.getInitialSize());
        //datasource.setMinIdle(db.getMinIdle());
        //datasource.setMaxActive(db.getMaxActive());
        //datasource.setMaxWait(db.getMaxWait());
        //datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
        //datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
        //datasource.setValidationQuery(db.getValidationQuery());
        //datasource.setTestOnReturn(db.isTestOnReturn());
        //datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
        //datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
        //datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
        try {
            datasource.setFilters(db.getFilters());
        } catch (SQLException e) {
            logger.info("setFilters Exception : ", e);
        }
        //datasource.setConnectionProperties(db.getConnectionProperties());
        datasource.setValidationQuery(db.getValidationQuery());
        return datasource;
    }

    @Bean(name = DATA_SOURCE_KY_ORDER)
    @Qualifier(DATA_SOURCE_KY_ORDER)
    @ConfigurationProperties(prefix = "spring.datasource.ky_order")
    public DataSource kyOrderDataSource(@Qualifier("kyOrderDBConfig") KyOrderDBConfig db) {
        //return DataSourceBuilder.create().build();
        // 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
        final DruidDataSource datasource = new DruidDataSource();
        datasource.setName(db.getName());
        datasource.setUrl(db.getUrl());
        datasource.setUsername(db.getUsername());
        datasource.setPassword(db.getPassword());
        datasource.setDriverClassName(db.getDriverClassName());
        //datasource.setInitialSize(db.getInitialSize());
        //datasource.setMinIdle(db.getMinIdle());
        //datasource.setMaxActive(db.getMaxActive());
        //datasource.setMaxWait(db.getMaxWait());
        //datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
        //datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
        //datasource.setValidationQuery(db.getValidationQuery());
        //datasource.setTestOnReturn(db.isTestOnReturn());
        //datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
        //datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
        //datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
        try {
            datasource.setFilters(db.getFilters());
        } catch (SQLException e) {
            logger.error("setFilters Exception : ", e);
        }
        //datasource.setConnectionProperties(db.getConnectionProperties());
        datasource.setValidationQuery(db.getValidationQuery());
        return datasource;
    }

}

編寫DataDruidConfig類,如下:

 

@Configuration
public class DataDruidConfig {


    @Value("${druid.monitor.loginUsername}")
    private String loginUsername;

    @Value("${druid.monitor.loginPassword}")
    private String loginPassword;

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.addInitParameter("profileEnable", "true");
        return filterRegistrationBean;
    }

    @Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        reg.setServlet(new StatViewServlet());
        Map<String, String> initParameters = new HashMap<>();
        initParameters.put("resetEnable", "false"); //禁用HTML頁面上的“Rest All”功能
        //initParameters.put("allow", "10.8.9.115");  //ip白名單(沒有配置或者爲空,則允許所有訪問)
        initParameters.put("loginUsername", StringUtils.isNotBlank(loginUsername) ? loginUsername : "admin");
        ;  //監控頁面登錄用戶名
        initParameters.put("loginPassword", StringUtils.isNotBlank(loginPassword) ? loginPassword : "admin");  //監控頁面登錄用戶密碼
        //initParameters.put("deny", "127.0.0.1"); //ip黑名單
        //如果某個ip同時存在,deny優先於allow
        reg.setInitParameters(initParameters);
        return reg;
    }
}

項目啓動,訪問項目地址:http://localhost:8080/druid/login.html

就可以訪問如下界面:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章