1.pom.xml导入坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!-- 后面需要用到log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
2.application.yaml配置文件中配置Druid
#配置数据源 data-username 会出错,必须使用username
spring:
datasource:
username: root
password: 1511
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8
#指定数据源
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3.新建Druid配置类
@Configuration //声明为配置类
public class DruidConfig {
//绑定yaml中的配置,
//这样yaml中关于Druid的配置就能生效了
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
}
4.测试
@SpringBootTest
class SpringbootJdbcApplicationTests {
@Autowired
private DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看默认数据源 class com.zaxxer.hikari.HikariDataSource
System.out.println(dataSource.getClass());
// pom导入Druid,配置文件加入type: com.alibaba.druid.pool.DruidDataSource
// 数据源就改变了 :class com.alibaba.druid.pool.DruidDataSource
//获取数据库连接
System.out.println(dataSource.getConnection());
System.out.println(dataSource);
}
}
5.查看控制台输出
com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@6468a7b6
{
CreateTime:"2020-12-13 23:27:14",
ActiveCount:1,
PoolingCount:4,
CreateCount:5,
DestroyCount:0,
CloseCount:0,
ConnectCount:1,
Connections:[
{ID:797313059, ConnectTime:"2020-12-13 23:27:15", UseCount:0, LastActiveTime:"2020-12-13 23:27:15"},
{ID:1768639125, ConnectTime:"2020-12-13 23:27:15", UseCount:0, LastActiveTime:"2020-12-13 23:27:15"},
{ID:1813838419, ConnectTime:"2020-12-13 23:27:15", UseCount:0, LastActiveTime:"2020-12-13 23:27:15"},
{ID:1298707825, ConnectTime:"2020-12-13 23:27:15", UseCount:0, LastActiveTime:"2020-12-13 23:27:15"}
]
}
[
{
ID:797313059,
poolStatements:[
]
},
{
ID:1768639125,
poolStatements:[
]
},
{
ID:1813838419,
poolStatements:[
]
},
{
ID:1298707825,
poolStatements:[
]
}
]
启用Druid监控
1.DruidConfig.java类中配置
@Configuration
public class DruidConfig {
//绑定yaml中的配置,
//这样yaml中关于Druid的配置就能生效了
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控功能:web.xml ,ServletRegistrationBean
//因为SpringBoot 内置了servlet容器,所以没有web.xml ,
//替代方法:ServletRegistrationBean
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后台需要有人 登录,账号密码设置
HashMap<String, String> initParameters = new HashMap<>();
//增加配置
initParameters.put("loginUsername","admin"); //登录key是固定的 不能更改
initParameters.put("loginPassword","123456");
//允许谁可以访问
initParameters.put("allow","");//为空 则所有人都可以访问
bean.setInitParameters(initParameters);//设置初始化参数
return bean;
}
}
2.输入 http://localhost:8080/druid/index.html 访问
由于未登录,会自动跳转到登录页面,用户名密码必须是上面配置的
登录成功后就可以查看了,很多功能都是Druid自带的
添加Filter过滤器
//配置filter
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
//可以过滤哪些请求呢?
HashMap<String, String> initParameters = new HashMap<>();
//这些东西不进行统计
initParameters.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParameters);
return bean;
}