介绍
Druid是阿里使用的数据库连接池,被阿里推崇为Java最好的数据库连接池。不仅可以承担数据库的连接访问工作,还可以提供强大的监控和扩展功能。
集成到Spring Boot
pom.xml
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
其版本可以查看官方Maven仓库:
https://mvnrepository.com/artifact/com.alibaba/druid
这里使用的是Druid的官方Maven依赖。若是使用druid-spring-boot
,则后续的配置会简单一些。但druid-spring-boot
截止到目前已经有两年没有更新,最后的版本截止到1.1.10。
配置文件
通常将配置写入到yml/properties文件中。这里以properties文件为例。
Druid的配置可以添加到默认的application.properties文件中,也可以添加到自定义的properties文件中。在resources文件夹下新建一个config文件夹,创建一个druid.properties文件,写入Druid数据库连接池配置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
这里仅仅配置了其中最基础的几项内容。详细配置可以参考官方文档:
https://github.com/alibaba/druid
MyBatis配置类
修改MyBatis的配置类,令其读取druid.properties并使用Durid的数据源。
@Configuration
@MapperScan(basePackages = "com.template.dao", sqlSessionTemplateRef = "sqlSessionTemplate")
@PropertySource(value = {"classpath:config/druid.properties"},ignoreResourceNotFound = false, encoding = "UTF-8", name = "druid.properties")
public class DataSource1Config {
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
@Primary
public DataSource druidDataSource() {
return new DruidDataSource();
}
@Bean(name = "sqlSessionFactory")
@Primary
public SqlSessionFactory dbSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "transactionManager")
@Primary
public DataSourceTransactionManager dbTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplate")
@Primary
public SqlSessionTemplate dbSqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
/**
* 过滤
*/
@Bean
public FilterRegistrationBean druidStatFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
// 过滤规则
filterRegistrationBean.addUrlPatterns("/*");
// 需要忽略的内容
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif, *.jpg,*.png, *.css,*.ico,/druid/*");
return filterRegistrationBean;
}
/**
* 注册DruidServlet
* 若使用druid-spring-boot依赖,则不需要该注册
*/
@Bean
public ServletRegistrationBean druidServletRegistrationBean() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
servletRegistrationBean.addUrlMappings("/druid/*");
return servletRegistrationBean;
}
}
相比于MyBatis的原始配置,有3处需要更改:
dataSource
的返回类需要使用DruidDataSource
。- 添加了
druidStatFilter
来进行过滤。 - 添加了
druidServletRegistrationBean
来注册DruidServlet。若是使用了druid-spring-boot
依赖,则不需要该注册。
访问
直接访问服务端地址,加上druid路径即可:
http://127.0.0.1:9100/druid/
Druid内置的index.html会打开,显示所有统计数据。