Druid连接池SpringBoot整合

为什么要用Druid不用springboot默认的?

  因为Druid有监控sql的功能。

springboot默认的连接池比Druid性能高

springboot配置Druid分二步:

1.配置数据库及Druid属性·

2.配置Druid相关的类和过滤器【Filter】

 

数据库及Druid属性

#配置数据源相关,使用阿里巴巴的druid数据源
#dbType
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#自定义数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#连接池配置
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=30
# 开启哪些拦截器 stat:性能监控, wall: 防火墙控制
spring.datasource.druid.filters=stat,wall

Druid相关的类和过滤器【Filter】

1.数据源配置

package com.zhao.nettydemo.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.sql.SQLException;

@Configuration
public class DruidConfig {
    /**
     * 监控统计用的filter:stat    WebStatFilter别名stat
     * 日志用的filter:log4j
     * 防御sql注入的filter:wall
     */
    @Value("${spring.datasource.druid.filters}")
    private String filters;

    /**
     * destroyMethod = "close":bean销毁时执行DruidDataSource的close()方法
     * initMethod = "init" bean的初始化时执行的DruidDataSource的init()方法
     */
    @Bean(destroyMethod = "close",initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DruidDataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters(filters);
        return druidDataSource;
    }
}
2.配置Web和Druid数据源之间的管理关联监控统计
package com.zhao.nettydemo.config;

import com.alibaba.druid.support.http.WebStatFilter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

/**
 * WebStatFilter类: 用于配置Web和Druid数据源之间的管理关联监控统计
 * urlPatterns = "/*" 过滤所有
 * name = "exclusions"    value= 后面的不过滤
 */
@WebFilter(filterName = "druidStatFilter", urlPatterns = "/*", asyncSupported = true,
        initParams = {
                @WebInitParam(name = "exclusions", value = "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/monitor/druid/*")//忽略资源
        }
)
public class DruidStatFilter extends WebStatFilter {
}

3.配置监控信息页面 

"allow", value = ""
"deny", value = ""
"loginUsername", value = "admin"  druid的用户名 
"loginPassword", value = "123456" druid的密码

  deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
  如果allow没有配置或者为空,则允许所有访问

package com.zhao.nettydemo.config;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

/**
 * StatViewServlet用于展示Druid的统计信息
 * 用途包括:
 * 提供监控信息展示的html页面
 * 提供监控信息的JSON API
 * url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是http://127.0.0.1:8080/monitor/druid/index.html
 * @WebServlet 注解用于标注在一个继承了HttpServlet类之上,属于类级别的注解。
 */
@WebServlet(urlPatterns = "/monitor/druid/*", asyncSupported = true,
        initParams = {
                @WebInitParam(name = "allow", value = ""),
                @WebInitParam(name = "deny", value = ""),
                @WebInitParam(name = "loginUsername", value = "admin"),
                @WebInitParam(name = "loginPassword", value = "123456")
        })
public class DruidStatViewServlet extends StatViewServlet {
}

启动类配置注解@ServletComponentScan

package com.zhao.nettydemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
// 扫描项目下面的 @WebFilter和 @WebServlet 也就是扫描过滤器和servlet配置类
@ServletComponentScan
public class NettyDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(NettyDemoApplication.class, args);
    }

}

依赖

 <!--   druid   -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
         <!-- jdbc -->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
     </dependency>

如果不配置jdbc会出现:

  Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType错误

访问

http://127.0.0.1:8080/monitor/druid/index.html页面【DruidStatViewServlet 类中配置的】
用户名:admin
密码:123456

Druid的各种页面存在于com.alibaba.druid.support 下

index.html页面存在于com.alibaba.druid.support.monitor.resources下
posted @ 2020-04-04 20:03  Angry-rookie  阅读(675)  评论(0)    收藏  举报