介紹
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會打開,顯示所有統計數據。