第一步: 引入依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
第二步: 编写配置文件 druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test?useEncode=true;characterEncoding=utf-8;
username=root
password=root
#监控统计用的filter=stat 日志用的filter=log4j 防御sql注入的filter=wall
filters=stat
#初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize=1
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降
#如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait=60000
#最小连接池数量
minIdle=1
#最大连接池数量
maxActive=5
#1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
#用来检测连接是否有效的sql,要求是一个查询语句。
#如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
validationQuery=SELECT'x'
#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测
#如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testWhileIdle=true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnBorrow=true
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn=true
#对于长时间不使用的连接强制关闭
removeAbandoned=true
#超过30分钟开始关闭空闲连接
removeAbandonedTimeout=1800
#将当前关闭动作记录到日志
logAbandoned=true
第三步: 启动类中注入 DataSource
/** 注入数据连接池 */
@Bean
public DataSource registerDataSource(){
DataSource ds = null;
Properties prop = new Properties();
try (InputStream in = Thread.currentThread().getClass().getResourceAsStream("druid.properties")){
prop.load(in);
//此处在加载前可以做一些处理, example: 服务器的链接与本地不一致
ds = DruidDataSourceFactory.createDataSource(prop);
return ds;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
附: 使用druid
自带监控功能
附1: 开启自定义filter
和servlet
//启动类中新增注解
@ServletComponentScan //开启后支持自定义Servlet和Filter
public class AppStart extends WebMvcConfigurerAdapter {
...
}
附2: 新增DruidStatFilter
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import com.alibaba.druid.support.http.WebStatFilter;
@WebFilter(
filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
/** 忽略资源 */
@WebInitParam(name="exclusions", value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/static/*"),
@WebInitParam(name="profileEnable",value="true"),
@WebInitParam(name="principalCookieName",value="USER_COOKIE"),
@WebInitParam(name="principalSessionName",value="USER_SESSION")
}
)
public class DruidStatFilter extends WebStatFilter {
}
附3: 新增DruidStatViewServlet
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import com.alibaba.druid.support.http.StatViewServlet;
@WebServlet(urlPatterns="/druid/*",
initParams={
/** 白名单,如果不配置或value为空,则允许所有 */
@WebInitParam(name="allow",value=""),
/** 黑名单,与白名单存在相同IP时,优先于白名单 */
@WebInitParam(name="deny",value=""),
/** 用户名 */
@WebInitParam(name="loginUsername",value="root"),
/** 密码 */
@WebInitParam(name="loginPassword",value="1234"),
/** 禁用HTML页面上的“Reset All”功能 */
@WebInitParam(name="resetEnable",value="false")
})
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = 1L;
}
OK了, 然后访问 http://<host>:<port>/<context-path>/druid
就可以看到监控页面