SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发
1 项目预备
-
创建SpringBoot基础项目
-
SpringBoot项目集成mybatis
数据库衔接池担任分配、管理和释放数据库衔接,它允许应用程序重复使用一个现有的数据库衔接,而不是再从头树立一个。
在Spring Boot 2.0版别中,默许数据库池技能已从Tomcat Pool切换到HikariCP,我们在发动项目后,拜访数据查询,控制台日志可以输相关信息。
Druid是阿里系供给的一个开源衔接池,除在衔接池之外,Druid还供给了十分优秀的数据库监控和扩展功用,所以在项目开发中一般会使用 Druid 。
2 Druid 简略介绍
Druid是阿里开源的一个JDBC应用组件,经过Druid衔接池中间件, 可以完成的功用如下:
- 监控数据库拜访功用,经过StatFilter插件,具体统计SQL的履行功用
- SQL履行日志,Druid供给了不同的LogFilter,可以支撑Common-Logging、Log4j和JdkLog
- 数据库暗码加密。
翻开pom文件,增加 druid 相关的 maven 依靠。
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<!-- 数据库衔接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
需要注意 log4j 日志
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
在 application.yml 中 把原有的数据源装备替换成 druid 数据源并装备数据源相关参数
spring:
mvc:
pathmatch:
matching-strategy : ant-path-matcher
datasource:
name: druidDataSource
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://mysql:3306/spring_boot?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&useSSL=false
username: testadmin
password: qwert.12345
filters: stat,wall,log4j,config
max-active: 100
initial-size: 1
max-wait: 60000
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 50
max-pool-prepared-statement-per-connection-size: 20
filter:
stat:
log-slow-sql: true
2 装备Servlet和Filter
在config包中增加一个DruidConfig装备类。
import javax.servlet.Filter;
import javax.servlet.Servlet;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
@Configuration
public class DruidConfig {
/**
* 注册Servlet信息, 装备监控视图
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public ServletRegistrationBean<Servlet> druidServlet() {
ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*");
//白名单:
servletRegistrationBean.addInitParameter("allow", "192.168.10.22");
//IP黑名单 (存在共同时,deny优先于allow) : 假如满意deny的话提示:Sorry, you are not permitted to view this page.
servletRegistrationBean.addInitParameter("deny", "192.168.1.119");
//登录查看信息的账号暗码, 用于登录Druid监控后台
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
//是否可以重置数据.
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
/**
* 注册Filter信息, 监控拦截器
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean<Filter> filterRegistrationBean() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
2.1 装备监控拦截器
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import com.alibaba.druid.support.http.WebStatFilter;
/**
* 装备监控拦截器, druid监控拦截器
*/
@WebFilter(filterName = "druidWebStatFilter",
urlPatterns = "/*",
initParams = {
@WebInitParam(name = "exclusions",
value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
), // 疏忽资源
})
public class DruidStatFilter extends WebStatFilter {
}
2.2 装备Druid监控视图
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import com.alibaba.druid.support.http.StatViewServlet;
/**
* druid监控视图装备
*/
@WebServlet(urlPatterns = "/druid/*", initParams={
@WebInitParam(name="allow",value="192.168.6.195"), // IP白名单 (没有装备或者为空,则允许所有拜访)
@WebInitParam(name="deny",value="192.168.6.73"), // IP黑名单 (存在共同时,deny优先于allow)
@WebInitParam(name="loginUsername",value="admin"), // 用户名
@WebInitParam(name="loginPassword",value="admin"), // 暗码
@WebInitParam(name="resetEnable",value="true") // 禁用HTML页面上的“Reset All”功用
})
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = 7359758657306626394L;
}
3 发动项目
发动应用,拜访: http://localhost:8899/druid/login.html, 端口对应项目中使用的端口,进入Druid监控后台页面。 然后 postman 拜访一下 user/list 接口
然后在 druid 控制台就可以查看到对应的 监控数据 项目源码在这里 :gitee.com/android.lon… 有爱好可以关注一下公众号:biglead
本文正在参与「金石方案」