1. Druid简介
java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dhcp、proxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。接下来本教程就说一下druid的简单使用。
GitHub:https://github.com/alibaba/druid
2.引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
3. 添加配置文件
在application.yml中添加配置属性如下:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf-8&allowMultiQueries=true
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 10
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: true
testOnReturn: false
poolPreparedStatements: true
filters: stat
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
druid:
loginUsername: admin
loginPassword: admin
其中的spring.druid.loginUsernama
和spring.druid.loginPassword
是自定义属性,用于登录Druid控制台的用户名和密码
4. 读取配置属性
新建文件DruidProperties.java
,使用@ConfigurationProperties
读取application.yml
中的属性,封装后供其他地方使用,如下:
@ConfigurationProperties(prefix = "spring.druid")
@NoArgsConstructor
@Data
public class DruidProperties {
private String loginUsername;
private String loginPassword;
}
注:该类必须有Getter()
和Setter()
方法,此处用Lombok中的@Data
代替
5. 编写Druid配置文件
新建文件DruidConfig.java
,如下:
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource initDruidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
WallConfig wallConfig = new WallConfig();
wallConfig.setMultiStatementAllow(true);
WallFilter wallFilter = new WallFilter();
wallFilter.setConfig(wallConfig);
List<Filter> filters = new ArrayList<>();
filters.add(wallFilter);
druidDataSource.setProxyFilters(filters);
return druidDataSource;
}
/**
* Druid监控功能页面
* @param prop
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet(DruidProperties prop) {
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new StatViewServlet());
registrationBean.setUrlMappings(Collections.singletonList("/druid/*"));
//设置初始化参数
Map<String,String> initMap = new HashMap<>();
initMap.put("loginUsername", prop.getLoginUsername());
initMap.put("loginPassword", prop.getLoginPassword());
initMap.put("allow","");
initMap.put("deny","");
registrationBean.setInitParameters(initMap);
return registrationBean;
}
/**
* Druid监控功能的过滤器设置
* @return
*/
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new WebStatFilter());
registrationBean.setUrlPatterns(Collections.singletonList("/*"));
// 设置初始化参数
Map<String, String> initMap = new HashMap<>();
initMap.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico");
registrationBean.setInitParameters(initMap);
return registrationBean;
}
}
6. 访问Druid监控页面
启动项目,访问路径为项目路径/druid
,如localhost:8080/druid
,输入配置的用户名和密码,进入主页面
至此,Druid接入并配置成功!