基于springboot+maybatis+多数据源配置一文填坑。
上文中介绍了怎么配置多数据源。
配置完之后,在application.properties里配置了druid的连接池。
使用druid流程:
1、在pom.xml文件引入
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version> </dependency>
2、在application.properties里配置了druid的连接池
# 初始化大小,最小,最大 spring.druid.initialSize=5 spring.druid.minIdle=5 spring.druid.maxActive=20 # 配置获取连接等待超时的时间 spring.druid.maxWait=60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.druid.timeBetweenEvictionRunsMillis=60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 spring.druid.minEvictableIdleTimeMillis=300000 spring.druid.validationQuery=SELECT 1 FROM DUAL spring.druid.testWhileIdle=true spring.druid.testOnBorrow=false spring.druid.testOnReturn=false spring.druid.poolPreparedStatements=true spring.druid.maxPoolPreparedStatementPerConnectionSize=20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 spring.druid.filters=stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 spring.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
接下来开始填坑,先说一下事故过程,凌晨00:00,springBoot项目连接数据库便一直连不上,
然后开始找原因,发现记录日志报错:
开始报错:
Could not roll back JDBC transaction; nested exception is java.sql.SQLRecoverableException: No more data to read from socket
然后报错:
Could not roll back JDBC transaction; nested exception is java.sql.SQLRecoverableException: Closed Connection
重启中间件后,访问正常,然后运维部门说重启了数据库服务器,然后考虑到应该是连接没有重试,直接返回‘Closed Connection’,想到是不是没走druid连接池机制。
然后找代码,发现配置多数据源的时候,如下图,创建DataSource 时并没有配置druid连接池
@Bean(name = "master2DataSource") @ConfigurationProperties(prefix = "spring.datasource") @Primary public DataSource master2DataSource() { return DataSourceBuilder.create().build(); }
如果要使用druid连接池则需要修改,创建DataSource 时要new DruidDataSource();
@Bean(name = "master2DataSource") @ConfigurationProperties(prefix = "spring.datasource") @Primary public DataSource master2DataSource() { return new DruidDataSource(); }
druid更多配置: