依赖//mysql 驱动
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.21'
//druid
compile group: 'com.alibaba', name: 'druid', version: '1.1.10'
# 1. 新建druid配置信息类DruidConfiguration.javapackage com.futao.springmvcdemo.foundation.configuration;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import javax.sql.DataSource;import java.sql.SQLException;/**
* @author futao
* Created on 2018/10/11.
* ConfigurationProperties(prefix = "spring.datasource")使用规则,注入的字段如果为private,则必须具有setter方法
*/@Component@ConfigurationProperties(prefix = "spring.datasource")public class DruidConfiguration { /**
* 数据库地址
*/
private String url; /**
* 用户名
*/
private String userName; /**
* 密码
*/
private String password; /**
* 初始化连接数量
*/
private int initialSize; /**
* 最小闲置连接
*/
private int minIdle; /**
* 最大存活连接
*/
private int maxActive; /**
* 配置获取连接等待超时的时间
*/
private long maxWait; /**
* 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
*/
private long timeBetweenEvictionRunsMillis; /**
* 配置一个连接在池中最小生存的时间,单位是毫秒
*/
private long minEvictableIdleTimeMillis; /**
* 配置一个连接在池中最大生存的时间,单位是毫秒
*/
private long maxEvictableIdleTimeMillis; /**
*
*/
private boolean testWhileIdle; /**
*
*/
private boolean testOnBorrow; /**
*
*/
private boolean testOnReturn; /**
*
*/
private boolean poolPreparedStatements; /**
*
*/
private int maxOpenPreparedStatements; /**
*
*/
private boolean asyncInit; @Bean
public DataSource druidDataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(url);
druidDataSource.setUsername(userName);
druidDataSource.setPassword(password);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMaxWait(maxWait);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
druidDataSource.setPoolPreparedStatements(poolPreparedStatements);
druidDataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
druidDataSource.setAsyncInit(asyncInit); return druidDataSource;
} 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 int getInitialSize() { return initialSize;
} public void setInitialSize(int initialSize) { this.initialSize = initialSize;
} public int getMinIdle() { return minIdle;
} public void setMinIdle(int minIdle) { this.minIdle = minIdle;
} public int getMaxActive() { return maxActive;
} public void setMaxActive(int maxActive) { this.maxActive = maxActive;
} public long getMaxWait() { return maxWait;
} public void setMaxWait(long 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 long getMaxEvictableIdleTimeMillis() { return maxEvictableIdleTimeMillis;
} public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) { this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
} public boolean isTestWhileIdle() { return testWhileIdle;
} public void setTestWhileIdle(boolean testWhileIdle) { this.testWhileIdle = testWhileIdle;
} public boolean isTestOnBorrow() { return testOnBorrow;
} public void setTestOnBorrow(boolean testOnBorrow) { this.testOnBorrow = testOnBorrow;
} public boolean isTestOnReturn() { return testOnReturn;
} public void setTestOnReturn(boolean testOnReturn) { this.testOnReturn = testOnReturn;
} public boolean isPoolPreparedStatements() { return poolPreparedStatements;
} public void setPoolPreparedStatements(boolean poolPreparedStatements) { this.poolPreparedStatements = poolPreparedStatements;
} public int getMaxOpenPreparedStatements() { return maxOpenPreparedStatements;
} public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) { this.maxOpenPreparedStatements = maxOpenPreparedStatements;
} public boolean isAsyncInit() { return asyncInit;
} public void setAsyncInit(boolean asyncInit) { this.asyncInit = asyncInit;
}
}
# 2. 在application.yml中配置配置信息spring:
# 数据源
datasource:
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8 username: root password: 123456
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource platform: mysql initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 2000
minEvictableIdleTimeMillis: 600000
maxEvictableIdleTimeMillis: 900000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
asyncInit: true
filters: stat,wall,log4j logSlowSql: true
# 3. 添加过滤器DruidFilter.javadruid除了数据连接池,还集成了对站点的URL进行统计的功能,利用filter忽略druid对某些资源的统计package com.futao.springmvcdemo.controller;import com.alibaba.druid.support.http.WebStatFilter;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;/**
* @author futao
* Created on 2018/10/11.
*/@WebFilter(filterName = "DruidFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源})public class DruidFilter extends WebStatFilter {
}
# 4. 定义DruidServlet.java显示druid管理页面package com.futao.springmvcdemo.controller;import com.alibaba.druid.support.http.StatViewServlet;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;/**
* @author futao
* Created on 2018/10/11.
*/@WebServlet(urlPatterns = "/druid/*",
initParams = { @WebInitParam(name = "allow", value = "127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
@WebInitParam(name = "deny", value = "192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)
@WebInitParam(name = "loginUsername", value = "admin"),// 用户名
@WebInitParam(name = "loginPassword", value = "admin"),// 密码
@WebInitParam(name = "resetEnable", value = "false")// 禁用HTML页面上的“Reset All”功能
})public class DruidServlet extends StatViewServlet { private static final long serialVersionUID = -6085007333934055609L;
}
# 5. 对于基于注解的Filter和Servlet需要在SpringBoot的启动类上打上自动扫描注解@@ServletComponentScanpackage com.futao.springmvcdemo;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;/**
* @author futao
* ServletComponentScan 开启servlet和filter
*/@SpringBootApplication@ServletComponentScan@MapperScan("com.futao.springmvcdemo.dao")//@EnableAspectJAutoProxypublic class SpringmvcdemoApplication { public static void main(String[] args) {
SpringApplication.run(SpringmvcdemoApplication.class, args);
}
}
# 截一波运行图
作者:FutaoSmile丶
链接:https://www.jianshu.com/p/0631755f9983