Druid 是阿里巴巴推出的一款开源的高性能数据源产品,Druid 支持所有 JDBC 兼容的数据库,包括 Oracle、MySQL、SQL Server 和 H2 等等。
通过 Druid 的监控功能,可以实时观察数据库连接池和 SQL 的运行情况,帮助用户及时排查出系统中存在的问题。
https://github.com/alibaba/druid/wiki/首页
Druid 不是 Spring Boot 内部提供的技术,它属于第三方技术,我们可以通过以下两种方式进行整合:
- 自定义整合 Druid
- 通过 starter 整合 Druid
1、自定义整合 Druid
1.1、添加依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.14</version> </dependency>
1.2、添加配置类:
/** * 数据源配置 */ public class DataSourceConfig implements WebMvcConfigurer { @ConfigurationProperties("spring.datasource") @Bean public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } }
1.3、新增数据库配置
spring: datasource: username: root password: root url: jdbc:mysql://127.0.0.1:3306/spring driver-class-name: com.mysql.cj.jdbc.Driver
1.4、开启druid内置监控页面
/** * 数据源配置 */ @Configuration public class DataSourceConfig implements WebMvcConfigurer { @ConfigurationProperties("spring.datasource") @Bean public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } /** * 开启 Druid 数据源内置监控页面 * * @return */ @Bean public ServletRegistrationBean statViewServlet() { StatViewServlet statViewServlet = new StatViewServlet(); //向容器中注入 StatViewServlet,并将其路径映射设置为 /druid/* ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(statViewServlet, "/druid/*"); //配置监控页面访问的账号和密码(选配) servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "123456"); return servletRegistrationBean; } }
1.5、开启SQL监控
在 dataSource 的 Bean 中添加一个取值为“stat”的“filters”属性
@ConfigurationProperties("spring.datasource") @Bean public DataSource dataSource() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource(); //开启SQL监控 druidDataSource.setFilters("stat"); return druidDataSource; }
1.6、开启防注入防火墙
1.7、开启监控Web-Jdbc关联监控
/** * 向容器添加WebStatFilter * 开启web-jdbc关联监控 * @return */ @Bean public FilterRegistrationBean druidWebStatFilter(){ WebStatFilter webStatFilter = new WebStatFilter(); FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = new FilterRegistrationBean<>(webStatFilter); //监控所有的访问 webStatFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); //排除监控的路径 webStatFilterFilterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return webStatFilterFilterRegistrationBean; }
2、通过 starter 整合 Druid
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.14</version> </dependency>
2.1、配置属性描述
2.1.1、JDBC 通用配置
spring: datasource: username: root #数据库登陆用户名 password: root #数据库登陆密码 url: jdbc:mysql://127.0.0.1:3306/spring #数据库url driver-class-name: com.mysql.cj.jdbc.Driver #数据库驱动
2.1.2、Druid 数据源连接池配置
spring: datasource: druid: initial-size: 5 #初始化连接大小 min-idle: 5 #最小连接池数量 max-active: 20 #最大连接池数量 max-wait: 60000 #获取连接时最大等待时间,单位毫秒 time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒 validation-query: SELECT 1 FROM DUAL #测试连接 test-while-idle: true #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性 test-on-borrow: false #获取连接时执行检测,建议关闭,影响性能 test-on-return: false #归还连接时执行检测,建议关闭,影响性能 pool-prepared-statements: false #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭 max-pool-prepared-statement-per-connection-size: 20 #开启poolPreparedStatements后生效 filters: stat,wall #配置扩展插件,常用的插件有=>stat:监控统计 wall:防御sql注入 connection-properties: 'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000' #通过connectProperties属性来打开mergeSql功能;慢SQL记录
2.1.3、Druid 监控配置
spring: datasource: druid: # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置 stat-view-servlet: enabled: true #是否开启内置监控页面,默认值为 false url-pattern: '/druid/*' #StatViewServlet 的映射路径,即内置监控页面的访问地址 reset-enable: true #是否启用重置按钮 login-username: admin #内置监控页面的登录页用户名 username login-password: admin #内置监控页面的登录页密码 password # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter web-stat-filter: enabled: true #是否开启内置监控中的 Web-jdbc 关联监控的数据 url-pattern: '/*' #匹配路径 exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' #排除路径 session-stat-enable: true #是否监控session # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置 aop-patterns: com.hqyj.springboot.* #Spring监控AOP切入点,如x.y.z.abc.*,配置多个英文逗号分隔
2.2、配置属性描述Druid 内置 Filter 配置
可以通过 spring.datasource.druid.filters=stat,wall … 的方式来启用相应的内置 Filter,不过这些 Filter 使用的都是默认配置。如果默认配置不能满足我们的需求,我们还可以在配置文件使用 spring.datasource.druid.filter.* 对这些 Filter 进行配置,示例代码如下。
spring: datasource: druid: # 对配置已开启的 filters 即 stat(sql 监控) wall(防火墙) filter: #配置StatFilter (SQL监控配置) stat: enabled: true #开启 SQL 监控 slow-sql-millis: 1000 #慢查询 log-slow-sql: true #记录慢查询 SQL #配置WallFilter (防火墙配置) wall: enabled: true #开启防火墙 config: update-allow: true #允许更新操作 drop-table-allow: false #禁止删表操作 insert-allow: true #允许插入操作 delete-allow: true #删除数据操作