druid数据源
阿里巴巴开源数据源,有良好的数据库监控功能,稳定,快,可以监控连接数,慢sql。好像现在有个更屌的数据源HikariCP
,不过两者针对的方向不一样,一个是要监控加连接。一个单纯连接光速连接。
SpringBoot整合Druid
- 增加依赖
当然其他的web模块依赖,jpa依赖,mysql依赖也要。
<!--druid数据源配置-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
- 配置文件application.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-boot-jpa
username: root
password: root
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxActive: 20
# 配置获取连接等待超时的时间(毫秒)
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置有一个连接在连接池中的最小生存时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
filters: stat, wall, log4j
# 通过connectProperties属性来打开mergeSql功能,慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1
jpa:
hibernate:
ddl-auto: update
show-sql: true
open-in-view: true
- 页面请求后台数据
account实体对象和jpa的接口都和上章节一样。
增加一个控制器访问即可。
AccountController
@RestController
@RequestMapping("/account")
public class AccountController {
@Autowired
AccountDao accountDao;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public List<Account> getAccounts() {
return accountDao.findAll();
}
}
- 启动,页面访问http://localhost:8080/account/list 页面可以有json字符串输出,证明整合成功。
启动druid监控
增加配置文件DruidConfiguration
,和主函数同级
/**
* Description:
* author: LinQin
* date: 2018/07/04
*/
@Configuration
public class DruidConfiguration {
/**
* 配置监控服务器
*
* @return 返回监控注册的servlet对象
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 添加IP白名单
servletRegistrationBean.addInitParameter("allow", "192.168.25.125,127.0.0.1");
// 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
servletRegistrationBean.addInitParameter("deny", "192.168.25.123");
// 添加控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "root");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
/**
* 配置服务过滤器
*
* @return 返回过滤器配置对象
*/
@Bean
public FilterRegistrationBean statFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
// 添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
// 忽略过滤格式
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
return filterRegistrationBean;
}
}
同时主函数增加注解@EnableAutoConfiguration
页面访问http://localhost:8080/druid/login.html,弹出登录界面,输入配置的帐号密码root/123456
可以查看慢sql,慢sql的记录值在yml的connectionProperties
里面配置。
记录慢sql失效
网上很多教程都有整合druid,也可以登录进去,但是就是无法记录慢sql。后来发现引用的依赖不同。
这个依赖可以记录慢sql
<!--druid数据源配置,使用artifactId为druid无法记录sql-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
这个不可以,其他druid功能都有
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>RELEASE</version>
</dependency>