涉及部分:pom依赖、配置文件、登录方式
maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
springMVC工程配置内容
在web.xml中引入过滤的filter和请求servlet:
<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>
<filter>
<filter-name>druidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>
</init-param>
<init-param>
<param-name>principalSessionName</param-name>
<param-value>sessionInfo</param-value>
</init-param>
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>druidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--数据库监控 结束-->
applicationContext.xml中配置数据库连接池
数据库已mysql为例,Tips:数据库url,username,password等内容自行修改
<!-- alibab数据源 -->
<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertyname="url"value="jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false"/>
<propertyname="username"value="root"/>
<propertyname="password"value="root"/>
<!-- 连接池最大使用连接数 -->
<propertyname="maxActive"value="100"/>
<!-- 初始化连接大小 -->
<propertyname="initialSize"value="10"/>
<!-- 获取连接最大等待时间 -->
<propertyname="maxWait"value="30000"/>
<!-- 连接池最小空闲 -->
<propertyname="maxIdle"value="10"/>
<!-- 自动清除无用连接 -->
<propertyname="removeAbandoned"value="true"/>
<!-- 清除无用连接的等待时间 -->
<propertyname="removeAbandonedTimeout"value="180"/>
<!-- 连接属性 -->
<propertyname="connectionProperties"value="clientEncoding=UTF-8"/>
<!-- 属性类型是字符串,通过别名的方式配置扩展插件 常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall -->
<propertyname="filters"value="stat,wall"/>
<propertyname="timeBetweenEvictionRunsMillis"value="3000"/>
<propertyname="minEvictableIdleTimeMillis"value="300000"/>
<!-- 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。 -->
<propertyname="validationQuery"value="SELECT 'x'"/>
<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
<propertyname="testWhileIdle"value="true"/>
<!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 -->
<propertyname="testOnBorrow"value="false"/>
<!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
<propertyname="testOnReturn"value="false"/>
<!-- 是否缓存preparedStatement,也就是PSCache。 -->
<propertyname="poolPreparedStatements"value="true"/>
<propertyname="maxPoolPreparedStatementPerConnectionSize"value="20"/>
如果项目中使用单独的数据库配置db.properties,applicationContext.xml可以用$获取配置文件中的字段替换以上value。
Springboot项目
application.yml中配置druid
spring:
datasource:
data-username: xxx
data-password: xxx
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8
type: com.alibaba.druid.pool.DruidDataSource
#下面都是一些参数设置,详细含义可以看官方文档
initialSize: 5
minIdle: 2
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
#配置监控统计的拦截功能,stat,监控统计,wall,防御sql注入,log4j,日志记录
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
需要注意的,我们在上面因为使用到了log4j功能,所以导入相关依赖,不然就会报错
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
配置druid的config配置类
可以配置登录druid监控的账号密码(druid/druid),ip的黑白名单,
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DruidConfig{
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSourcedruidDataSource(){
return new DruidDataSource();
}
//后台监控
@Bean
public ServletRegistrationBeantoBean(){
ServletRegistrationBean<StatViewServlet> bean= new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
//配置后台账号密码
Map<String,String> map=new HashMap<>();
//用户名和密码的key是不可以更改的
map.put("loginUsername","druid");
map.put("loginPassword","druid");
//允许什么可以进入
map.put("allow","127.0.0.1");
//配置不可以进入
map.put("deny","192.168.0.1");
//设置初始化参数
bean.setInitParameters(map);
return bean;
}
}
登录页面
springmvc项目使用ip:port/项目名/druid/index.xml访问
spring使用ip:prot/druid/index.xml