SpringBoot整合Durid
上一篇我们整合了MySQL和JDBCTemplate,并在结尾完成了双数据源的配置和插入动作。当我们将数据插入成功后,查看控制台就会发现,我们已经使用了默认的数据库连接池HikariDataSource。
除了HikariDataSource这款SpringBoot默认的数据库连接池外,还支持其他数据库连接池,比如本篇将要介绍的另一种优秀的数据库连接池——阿里巴巴Durid!
Durid
为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目,集成了SQL监控,黑名单拦截等功能,拥有强大的监控特性。通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。
首先在.xml文件中添加依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency>12345复制代码类型:[java]
随后我们要配置application.yml文件,完整版如下:
server: port: 8888spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: #配置连接池的相关的信息 druid: # 初始连接数量(默认值为0) initial-size: 5 # 最小空闲连接数,即使连接使用的少了,也还是会保留min-idle个连接 min-idle: 10 # 最大连接数(不能设置太大) max-active: 20 # 获取连接时的最大等待时间(单位是ms) max-wait: 50000 # 一个连接在池中最小生存的时间(单位是ms) min-evictable-idle-time-millis: 150000 # 检测需要关闭空闲连接的时间(单位是ms) time-between-eviction-runs-millis: 50000 # 配置扩展插件:去掉后,监控界面的sql无法统计(stat-监控统计,log4j-日志,wall-防火墙,防止SQL注入) filters: stat,wall,log4j2 # 配置慢sql展示语句,slowSqlMillis对应的是慢查询语句的时间 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10 # 检测连接是否有效,为空时以下三个配置均无效 validation-query: SELECT 1 DROM DUAL # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能 test-on-borrow: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能 test-on-return: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能 test-while-idle: true # 配置登录相关信息 stat-view-servlet: # 是否开启 StatViewServlet enabled: true #配置访问网址 url-pattern: "/druid/*" # 访问监控页面 白名单,默认127.0.0.1 allow: 127.0.0.1 # 访问监控页面 黑名单,黑名单不能访问 deny: 192.168.111.112 # 访问监控页面 登陆账号 login-username: JavaFamily # 访问监控页面 登陆密码 login-password: JavaFamily # 是否可以重置数据源 reset-enable: true # 配置监控 web-stat-filter: exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" enabled: true url-pattern: "/*" family: driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/Family?serverTimezone=GMT%2b8&characterEncoding=utf-8 username: root password: 123456 family2: driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/Family2?serverTimezone=GMT%2b8&characterEncoding=utf-8 username: root password: 12345612345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970复制代码类型:[java]
将以上依赖注入,配置完成后,我们修改一下DataSourceConfig.java中的代码:
@Configurationpublic class DataSourceConfig { // 当一个接口有多个时候实现类的时候,如果Spring只能选一个实现进行依赖注入时,就选这个数据源(默认数据源) @Primary @Bean(name = "familyDataSource") @ConfigurationProperties(prefix = "spring.datasource.family") public DataSource familyDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "family2DataSource") @ConfigurationProperties(prefix = "spring.datasource.family2") public DataSource family2DataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name="familyJdbcTemplate") public JdbcTemplate familyJdbcTemplate (@Qualifier("familyDataSource") DataSource datasource) { return new JdbcTemplate(datasource); } @Bean(name="family2JdbcTemplate") public JdbcTemplate family2JdbcTemplate(@Qualifier("family2DataSource") DataSource datasource) { return new JdbcTemplate(datasource); } }1234567891011121314151617181920212223242526272829复制代码类型:[java]
将原本的DataSourceBuilder换成红色标记部分。
SQL监控
准备工作完成后,运行代码,在浏览器输入http://localhost:8888/druid/login.html,跳转到登陆页面,输入用户名:JavaFamily,密码:JavaFamily
完成登陆后选择SQL监控:
由于还没有进行数据库操作,暂时没有监控内容。
我们在postman执行插入操作:
这时我们在回到浏览器查看SQL监控结果:
如果想要查看Durid的数据,那么就需要在controller中添加代码。
@GetMapping("/data")public Object druid(){ return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); }1234复制代码类型:[java]
Durid数据:
慢SQL查询
我们使用之前讲过的PetsController.java中通过id对宠物进行查询方法,在postman中进行查询操作:
由于id的值不同,会导致查询的sql时间不一致,我们查询多个不同的id就会发现最慢sql:
赞 (0)