============================
============================
DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0
、DBCP
、PROXOO
L等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,据说是目前最好的连接池。
DRUID
有一个可视化web界面,需要log4j支持
我们如何在整合Druid
数据源的同时又使用这个web面板呢?
1.导入Druid
和log4j
的依赖
在pom.xml中导入以下两个依赖
<!-- Druid-->
<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.17</version>
</dependency>
2.在application.properties中整合数据源
在resources资源包下创建log4j.properties文件
进行配置
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
在application.properties中写入一句代码代表数据源选择Druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
再在application.properties写上使用log4j
做filter的配置
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
spring.datasource.filters=stat,wall,log4j
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.useGlobalDataSourceStat=true
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3.拓展控制器
创建config包,在config包下编写DruidConfig.java。
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")//和配置文件的datasource绑定
public DataSource druidDataSource(){
return new DruidDataSource();
}
}
需要扩展,就在类上使用@Configuration
接管,再用@Bean
交给spring容器管理,最后再用@ConfigurationProperties
和配置文件中的配置绑定
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")//和配置文件的datasource绑定
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控功能web.xml
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//后台需要有人配置账号密码
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUsername", "admin"); //后台管理界面的登录账号
initParams.put("loginPassword", "123456"); //后台管理界面的登录密码
//后台允许谁可以访问
//initParams.put("allow", "localhost"):表示只有本机可以访问
//initParams.put("allow", ""):为空或者为null时,表示允许所有访问
initParams.put("allow", "");
//deny:Druid 后台拒绝谁访问
//initParams.put("xiaomakaiyuan", "192.168.1.00");表示禁止此ip访问
//设置初始化参数
bean.setInitParameters(initParams);
return bean;
//这些参数可以在 com.alibaba.druid.support.http.StatViewServlet 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
}
}
new ServletRegistrationBean(new StatViewServlet(), “/druid/*”)
即为配置了这个可视化web界面的路由为/druid
initParams.put(“loginUsername”, “admin”);
后台管理界面的登录账号
initParams.put(“loginPassword”, “123456”);
后台管理界面的登录密码 设置了这个可视化界面的管理员的账号密码
initParams.put(“allow”, “”);
表示任何人都可以去访问登录
4.运行测试
启动springboot服务,去浏览器访问http://localhost:xxxx/druid/login.html
可以看见出现以下登录面板,说明我们已经配置成功了
输入之前设置好的账号密码admin 123456登入
可以看见这里有多重数据监控服务
然后我们可以随便编写一个调用到数据库的web接口,观察一下druid是否能监控到
再去看监控面板,看见已经监测到sql行为
说明我们的Druid整合完毕,web面板也部署完毕
关注我自建博客站
http://blog.petchk.cn/
关注我git博客https://chenhuakai.github.io/