您的位置:首页 > 编程语言 > Java开发

11.玩转Spring Boot 集成Druid

2016-12-22 14:44 661 查看

玩转Spring Boot 集成Druid

      Spring Boot 使用的数据源默认的是:org.apache.tomcat.jdbc.pool.DataSource,在上篇的时候有没有发现没有配置数据源居然也行,是因为引入了JDBC Starter Poms 所以Spring Boot会帮我们自动创建,而在application.properties中的属性也是Spring Boot默认的。你可以在获取数据源的时候将数据源名称打印出来就知道了。接下来我们将说的是使用Druid来替换Spring Boot 默认的数据源,以下代码基于(10.玩转Spring
Boot 集成Mybatis)



1.在pom.xml加入Druid依赖,代码如下:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.27</version>
</dependency>

2.在application.properties中加入以下代码:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
#最小连接数量
spring.datasource.minIdle=2
#最大连接数量
spring.datasource.maxActive=5
#获取连接等待超时的时间
spring.datasource.maxWait=60000
#间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
#连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
#验证SQL
spring.datasource.validationQuery=SELECT 'x' FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
#打开PSCache,并且指定每个连接上PSCache的大小如果用Oracle,
#则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
#配置监控统计拦截的filters
spring.datasource.filters=stat



3.创建DruidConfigProperties类,代码如下:

package com.chengli.springboot.mybatis.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidConfigProperties {
private String driverClassName;
private String url;
private String username;
private String password;
private Integer minIdle;
private Integer maxActive;
private Integer maxWait;
private Long timeBetweenEvictionRunsMillis;
private Long minEvictableIdleTimeMillis;
private String validationQuery;
private Boolean testWhileIdle;
private Boolean testOnBorrow;
private Boolean testOnReturn;
private Boolean poolPreparedStatements;
private Integer maxPoolPreparedStatementPerConnectionSize;
private String filters;

public String getDriverClassName() {
return driverClassName;
}

public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public Integer getMinIdle() {
return minIdle;
}

public void setMinIdle(Integer minIdle) {
this.minIdle = minIdle;
}

public Integer getMaxActive() {
return maxActive;
}

public void setMaxActive(Integer maxActive) {
this.maxActive = maxActive;
}

public Integer getMaxWait() {
return maxWait;
}

public void setMaxWait(Integer maxWait) {
this.maxWait = maxWait;
}

public Long getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}

public void setTimeBetweenEvictionRunsMillis(Long timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}

public Long getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}

public void setMinEvictableIdleTimeMillis(Long minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}

public String getValidationQuery() {
return validationQuery;
}

public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}

public Boolean getTestWhileIdle() {
return testWhileIdle;
}

public void setTestWhileIdle(Boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}

public Boolean getTestOnBorrow() {
return testOnBorrow;
}

public void setTestOnBorrow(Boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}

public Boolean getTestOnReturn() {
return testOnReturn;
}

public void setTestOnReturn(Boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}

public Boolean getPoolPreparedStatements() {
return poolPreparedStatements;
}

public void setPoolPreparedStatements(Boolean poolPreparedStatements) {
this.poolPreparedStatements = poolPreparedStatements;
}

public Integer getMaxPoolPreparedStatementPerConnectionSize() {
return maxPoolPreparedStatementPerConnectionSize;
}

public void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) {
this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
}

public String getFilters() {
return filters;
}

public void setFilters(String filters) {
this.filters = filters;
}

}

4.在MybatisConfig类中加入以下代码:

@Bean(initMethod = "init", destroyMethod = "close")
public DruidDataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(druidConfigProperties.getDriverClassName());
druidDataSource.setUrl(druidConfigProperties.getUrl());
druidDataSource.setUsername(druidConfigProperties.getUsername());
druidDataSource.setPassword(druidConfigProperties.getPassword());
druidDataSource.setInitialSize(druidConfigProperties.getMinIdle());
druidDataSource.setMinIdle(druidConfigProperties.getMinIdle());
druidDataSource.setMaxActive(druidConfigProperties.getMaxActive());
druidDataSource.setMaxWait(druidConfigProperties.getMaxWait());
druidDataSource.setTimeBetweenEvictionRunsMillis(druidConfigProperties.getTimeBetweenEvictionRunsMillis());
druidDataSource.setMinEvictableIdleTimeMillis(druidConfigProperties.getMinEvictableIdleTimeMillis());
druidDataSource.setValidationQuery(druidConfigProperties.getValidationQuery());
druidDataSource.setTestWhileIdle(druidConfigProperties.getTestWhileIdle());
druidDataSource.setTestOnBorrow(druidConfigProperties.getTestOnBorrow());
druidDataSource.setTestOnReturn(druidConfigProperties.getTestOnReturn());
druidDataSource.setPoolPreparedStatements(druidConfigProperties.getPoolPreparedStatements());
druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(druidConfigProperties.getMaxPoolPreparedStatementPerConnectionSize());
druidDataSource.setFilters(druidConfigProperties.getFilters());
return druidDataSource;
}


5.加入Druid监控,代码如下:

package com.chengli.springboot.mybatis.config;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

@Configuration
public class DruidRegistionConfig {
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new StatViewServlet());
//拦截路径
servletRegistrationBean.addUrlMappings("/druid/*");
// 设置访问白名单
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 设置访问黑名单
// reg.addInitParameter("deny", "");
// 设置是否允许清空计数
servletRegistrationBean.addInitParameter("resetEnable", "false");
// 登录用户名
servletRegistrationBean.addInitParameter("loginUsername", "chengli");
// 登录密码
servletRegistrationBean.addInitParameter("loginPassword", "chengli");

return servletRegistrationBean;
}

@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
//拦截路径
filterRegistrationBean.addUrlPatterns("/*");
//排除指定路径
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

return filterRegistrationBean;
}
}


到这里就已经完成了,运行试试吧。完整的示例代码放在QQ交流群中 springboot-mybatis.zip

有兴趣的朋友可以加群探讨相互学习:

Spring Boot QQ交流群:599546061
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息