23 04月 2021

Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。

Spring Boot 2.0 以上默认使用 Hikari 数据源, Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,HikariCP重速度 Druid重安全和监控。由于比较简单下面直接上代码。

一、导入依赖

 <!-- druid连接池 -->
 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.21</version>
  </dependency>
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.21</version>
  </dependency>

二、配置数据源

#Druid连接池配置
#Oracle数据源配置
#spring.datasource.druid.driver-class-name=oracle.jdbc.OracleDriver  
#spring.datasource.druid.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#spring.datasource.druid.username=账号
#spring.datasource.druid.password=密码

#Mysql数据源配置
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/数据库名称?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.druid.username=账号
spring.datasource.druid.password=密码

#SpringBoot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。
#在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
spring.datasource.druid.pool-prepared-statements=false
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#配置扩展插件:监控统计用的filter:stat  日志用的filter:log4j  防御sql注入的filter:wall
#如果允许时报错java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入log4j依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

这里需要我们自己为 com.alibaba.druid.pool.DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,从而不再使用 SpringBoot 的自动生成;我们需要自己添加 DruidDataSource 组件到容器中,并绑定属性。

@Configuration
public class DruidConfig {
    /*
       将自定义的Druid数据源添加到容器中,不再让SpringBoot自动创建
       绑定全局配置文件中的druid数据源属性到com.alibaba.druid.pool.DruidDataSource从而让它们生效
       @ConfigurationProperties(prefix = "spring.datasource"):作用就是将全局配置到文件中
       前缀为spring.datasource的属性值注入到com.alibaba.druid.pool.DruidDataSourc的同名参数中
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

三、配置 Druid 数据源监控

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装路由器时,人家也提供了一个默认的 web页面。所以第一步需要设置 Druid 的后台管理页面,比如登录账号、密码等;配置后台管理;

@Configuration
public class DruidConfig {
		
	@Bean
    public ServletRegistrationBean statViewServlet() {
        //创建servlet注册实体
        // 1.StatViewServlet是druid实现的一个Servlet容器,来显示druid的一些信息
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        //设置ip白名单,为空时表示允许全部用户进入
        servletRegistrationBean.addInitParameter("allow", "");
        //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
        servletRegistrationBean.addInitParameter("deny", "ip地址");
        //设置控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "账号");
        servletRegistrationBean.addInitParameter("loginPassword", "密码");
        //是否可以重置数据
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    //设置网站的过滤信息
    @Bean
    public FilterRegistrationBean statFilter() {
        //创建过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //设置过滤器过滤路径
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略过滤的形式
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
  • 以上配置完成后就可以在浏览器中访问: http://localhost:8080/druid
  • 出现登录页面后输入设置好的账号密码就会出现如下页面:

图片

延伸阅读
  1. 上一篇:SpringBoot配置Swagger
  2. 下一篇:没有下一篇了
发表评论