web.xml配置
<!--展示Druid的统计信息:(1)提供监控信息展示的html页面;(2)提供监控信息的JSON API-->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- WebStatFilter用于采集web-jdbc关联监控的数据 -->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<!-- 排除一些不必要的url -->
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
<!-- 配置session名称,在session监控页面展示用户名 -->
<init-param>
<param-name>principalSessionName</param-name>
<param-value>userSession</param-value>
</init-param>
<!-- session最大监控数量 -->
<init-param>
<param-name>sessionStatMaxCount</param-name>
<param-value>1000</param-value>
</init-param>
<!-- 监控单个url调用的sql列表 -->
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
<!-- 开启慢SQL记录 -->
<init-param>
<param-name>logSlowSql</param-name>
<param-value>true</param-value>
</init-param>
<!-- 设置慢SQL的时长 -->
<init-param>
<param-name>slowSqlMillis</param-name>
<param-value>3000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
application.xml配置
<!-- druid连接池数据源配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url -->
<property name="url" value="${datasource.url}" />
<!-- 基本属性 user -->
<property name="username" value="${datasource.username}" />
<!-- 基本属性 password -->
<property name="password" value="${datasource.password}" />
<!-- 初始化连接数 -->
<property name="initialSize" value="30" />
<!-- 最小连接数 -->
<property name="minIdle" value="30" />
<!-- 最大连接数 -->
<property name="maxActive" value="200" />
<!-- 获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="2000" />
<!-- 一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="600000" />
<!-- 校验用sql语句 -->
<property name="validationQuery" value="select 1" />
<!-- 是否超时检测 -->
<property name="testWhileIdle" value="true" />
<!-- 申请连接检测 -->
<property name="testOnBorrow" value="true" />
<!-- 归还连接检测 -->
<property name="testOnReturn" value="false" />
<!-- 如果有initialSize数量较多时,打开会加快应用启动时间 -->
<property name="asyncInit" value="true" />
<!-- 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 1)监控统计用的filter:stat; 2)日志用的filter:log4j;3)防御sql注入的filter:wall -->
<property name="filters" value="stat,log4j" />
<!--日志配置 -->
<property name="proxyFilters">
<list>
<ref bean="log-filter"/>
</list>
</property>
</bean>
<!--日志配置 -->
<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
<property name="statementLogEnabled" value="true"/>
<property name="statementExecutableSqlLogEnable" value="true" />
</bean>
dataSource也可以采用spring显示配置
@Configuration
public class DruidConfiguration {
private static final Logger LOGGER = Logger.getLogger(DruidConfiguration.class);
@Value("${datasource.url}")
private String dbUrl;
@Value("${datasource.username}")
private String username;
@Value("${datasource.password}")
private String password;
@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.asyncInit}")
private boolean asyncInit;
@Value("${spring.datasource.filters}")
private String filters;
@Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource(){
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
//configuration
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
LOGGER.error("druid configuration initialization filter: "+ e);
}
return datasource;
}
}
log4j.properties配置
# Druid
log4j.logger.druid.sql=DEBUG
log4j.logger.druid.sql.DataSource=DEBUG
log4j.logger.druid.sql.Connection=DEBUG
log4j.logger.druid.sql.Statement=DEBUG
log4j.logger.druid.sql.ResultSet=DEBUG