这样的博客有很多了,我只是在此记录一下我遇到的问题,如果可以帮助到你,那就很开心了。
本篇文章的重点不是多数据源,而是在多数据源的情况下如何整合阿里的druid。
1. 配置文件(applications.properties文件)
坑0:我是从Hikari数据源改写到druid,Hikari的jdbc的url配置项名称是jdbc-url,而druid直接就是url
坑1:filters这个配置项很关键,它和sql监控有关.那么如何保证sql监控正常运行呢?保证你在新建数据源的时候,成功地绑定上这个配置项了!需要注意的问题就是 比如hlr那个数据库,配置项全名是spring.datasource.hlr.filters,那么对应的数据源@ConfigurationProperties的prefix参数必须是spring.datasource.hlr,假如是spring.datasource就不能绑定成功,结果就是sql监控无法正常显示。你以为这就完了吗,还要注意filter后面的内容,看你使用的日志框架是log4j还是logback,当然你可以先随便写一个,运行之后看控制台日志,如果报错load filter error, filter not found : logback(or log4j),那就已经说明你需要换一个试试了。
#jdbc-url和url还不是一回事,坑
#两个数据库分别是hlr和vlr
spring.datasource.hlr.url=jdbc:mysql://localhost:3306/hlr?serverTimezone=UTC
spring.datasource.hlr.username=root
spring.datasource.hlr.password=123456
spring.datasource.hlr.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hlr.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.hlr.filters= stat,wall,log4j
spring.datasource.vlr.url=jdbc:mysql://localhost:3306/vlr?serverTimezone=UTC
spring.datasource.vlr.username=root
spring.datasource.vlr.password=123456
spring.datasource.vlr.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.vlr.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.vlr.filters= stat,wall,log4j
2.配置类
hlr的配置类
@Configuration
@MapperScan(basePackages = "com.test.web.mapper.hlrMapper", sqlSessionFactoryRef = "hlrSqlSessionFactory")
public class HlrDataSourceConfiguration {
@Bean(name = "hlrDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.hlr")
public DataSource getHlrDataSource(){
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "hlrSqlSessionFactory")
@Primary
public SqlSessionFactory hlrSqlSessionFactory(@Qualifier("hlrDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("hlrSqlSessionTemplate")
@Primary
public SqlSessionTemplate hlrSqlSessionTemplate(
@Qualifier("hlrSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
vlr配置类
@Configuration
@MapperScan(basePackages = "com.test.web.mapper.vlrMapper",sqlSessionFactoryRef = "vlrSqlSessionFactory")
public class VlrDataSourceConfiguration {
@Bean(name = "vlrDataSource")
@ConfigurationProperties(prefix = "spring.datasource.vlr")
public DataSource getVlrDataSource(){
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "vlrSqlSessionFactory")
public SqlSessionFactory vlrSqlSessionFactory(@Qualifier("vlrDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "vlrSqlSessionTemplate")
public SqlSessionTemplate vlrSqlSessionTemplate(@Qualifier("vlrSqlSessionFactory")SqlSessionFactory sessionFactory){
return new SqlSessionTemplate(sessionFactory);
}
}
3.配置WebStatFilter和StatViewServlet
坑2 :这个坑我到现在还没明白。我测试的时候是单数据源,使用的配置类来配置WebStatFilter和StatViewServlet,成功了。但是多数据源的时候,访问监控页面报错404。后来按网上的方法,在applications.properties文件里直接配置。
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.session-stat-enable=false
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
spring.datasource.druid.web-stat-filter.principal-session-name=admin
spring.datasource.druid.web-stat-filter.principal-cookie-name=admin
spring.datasource.druid.web-stat-filter.profile-enable=true
# StatViewServlet配置
#展示Druid的统计信息,StatViewServlet的用途包括:1.提供监控信息展示的html页面2.提供监控信息的JSON API
#是否启用StatViewServlet默认值true
spring.datasource.druid.stat-view-servlet.enabled=true
#根据配置中的url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html例如:
#http://110.76.43.235:8080/druid/index.html
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#允许清空统计数据
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin