Druid连接池其实在网上一找一大堆文章,讲实话这里也只是作为自己记录下使用如何使用这个连接池。好的,废话不多说。
什么是Druid连接池?
Druid首先是一个数据库连接池。Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。内置了StatFilter功能,能采集非常完备的连接池执行信息,Druid连接池内置了一个监控页面,提供了非常完备的监控信息,可以快速诊断系统的瓶颈。
开始使用
我们简单的建立一个SpringBoot项目,引入Druid连接池。
<!--实现对 Druid 连接池的自动化配置-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>druid</artifactId>-->
<!-- <version>1.0.18</version>-->
<!-- </dependency>-->
druid-spring-boot-starter实现对 Druid 连接池的自动化配置,在application中进行配置
spring:
application:
name: druidDemo
datasource:
url: jdbc:mysql://rm-xxxxxxx.mysql.rds.aliyuncs.com/luu_mall?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: xxx # 数据库账号
password: xxx@ # 数据库密码
type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource
# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
druid: # 设置 Druid 连接池的自定义配置。然后 DruidDataSourceAutoConfigure 会自动化配置 Druid 连接池。
min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。
max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。
filter:
stat: # 配置 StatFilter ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
log-slow-sql: true # 开启慢查询记录
slow-sql-millis: 5000 # 慢 SQL 的标准,单位:毫秒
merge-sql: true # SQL合并配置
stat-view-servlet: # 配置 StatViewServlet ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
enabled: true # 是否开启 StatViewServlet
login-username: root # 账号
login-password: root # 密码
其他的什么mapper啥的配置就不说了,相信给位大佬不用说都知道,毕竟都是经常写的东西。
@SpringBootTest
写个测试类执行以下就知道咯。
然后我们看下监控台,访问http://127.0.0.1:8080/druid/datasource.html登录后
奈斯,以后老大要我查看慢sql就用这个了。
多数据源配置
以上呢是配置的单数据源,那么有些场景呢需要使用到多数据源,这里说下多数据源druid怎么配置的。
spring:
application:
name: druidDemo
datasource:
mall:
url: jdbc:mysql://rm-wz9yy0528x91z1iqdco.mysql.rds.aliyuncs.com/luu_mall?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root # 数据库账号
password: root0319@ # 数据库密码
type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource
min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。
max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。
# 用户数据源配置
users:
url: jdbc:mysql://rm-wz9yy0528x91z1iqdco.mysql.rds.aliyuncs.com/luu_user_center?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root # 数据库账号
password: root0319@ # 数据库密码
type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource
# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。
max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。
# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性
druid: # 设置 Druid 连接池的自定义配置。然后 DruidDataSourceAutoConfigure 会自动化配置 Druid 连接池。
filter:
stat: # 配置 StatFilter ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
log-slow-sql: true # 开启慢查询记录
slow-sql-millis: 5000 # 慢 SQL 的标准,单位:毫秒
merge-sql: true # SQL合并配置
stat-view-servlet: # 配置 StatViewServlet ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
enabled: true # 是否开启 StatViewServlet
login-username: root # 账号
login-password: root # 密码
配置类
@Configuration
public class DataSourceConfig {
/**
* 创建 orders 数据源
*/
@Primary
@Bean(name = "mallDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mall") // 读取 spring.datasource.mall配置到 HikariDataSource 对象
public DataSource ordersDataSource() {
return DruidDataSourceBuilder.create().build();
}
/**
* 创建 users 数据源
*/
@Bean(name = "usersDataSource")
@ConfigurationProperties(prefix = "spring.datasource.users")
public DataSource usersDataSource() {
return DruidDataSourceBuilder.create().build();
}
}
测试类中测试方法
private Logger logger = LoggerFactory.getLogger(DruidDemoApplicationTests.class);
@Resource(name = "mallDataSource")
private DataSource ordersDataSource;
@Resource(name = "usersDataSource")
private DataSource usersDataSource;
@Test
public void test() {
// orders 数据源
logger.info("[run][获得数据源:{}]", ordersDataSource.getClass());
// users 数据源
logger.info("[run][获得数据源:{}]", usersDataSource.getClass());
int a = testMapper.test();
System.out.println(a);
}
这样就等于配置了多个数据源,具体的怎么用呢就要看具体的场景了。
其实多数据源的配置常用的有三种方式:
扩展Spring的AbstractRoutingDataSource
通过Mybatis 配置不同的 Mapper 使用不同的 SqlSessionTemplate
分库分表中间件,比如Sharding-JDBC 、Mycat等。
这里就不细说咯,后面我们用到了再来记录下使用过程。