Springboot配置Druid数据源详解

配置数据源

1、添加Druid依赖

<!-- druid数据源-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.3</version>
</dependency>

2、配置Druid

spring:
  datasource:
    username: root
    password: root
    ## 数据库驱动类
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/security?serverTimezone=UTC
    ## 切换自定义数据源
    type: com.alibaba.druid.pool.DruidDataSource
 ##  数据源其他配置
 	#初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
    initialSize: 5
    # 已经不再使用,配置了也没效果
    minIdle: 5
    # 最大连接池数量
    maxActive: 20
    # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
    maxWait: 60000
    # 有两个含义: 
    #  1) Destroy线程会检测连接的间隔时间
    #  2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
    timeBetweenEvictionRunsMillis: 60000
    # 连接保持空闲而不被驱逐的最长时间
    minEvictableIdleTimeMillis: 300000
    # 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
    validationQuery: SELECT 1 FROM DUAL
    # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    testWhileIdle: true
    # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnBorrow: false
    # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnReturn: false
    # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
    poolPreparedStatements: true
##   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
	# 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 
	# 监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
    filters: stat,wall,log4j
    # 
    maxPoolPreparedStatementPerConnectionSize: 20
    # 
    useGlobalDataSourceStat: true 
    #  
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

3、测试Druid数据源是否切换成功

@SpringBootTest
class SpringBootDataJdbcApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void connection() throws SQLException {
        // 打印数据源:com.alibaba.druid.pool.DruidDataSource
        System.out.println(dataSource.getClass());
        // 获取连接对象
        Connection connection = dataSource.getConnection();
        // 打印连接对象:com.mysql.cj.jdbc.ConnectionImpl@715b886f
        System.out.println(connection);
        // 关闭连接
        connection.close();
    }
}

4、Druid数据源切换成功
Springboot配置Druid数据源详解

配置Druid数据源监控系统

@Configuration
public class DruidConfig {

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

    // 配置druid监控
    // 1、配置一个管理后台的 StatViewServlet
    // 以下属性可以在com.alibaba.druid.support.http.StatViewServlet或
    // com.alibaba.druid.support.http.ResourceServlet中找到
    @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");
        // 允许哪个IP访问,为""或null表示允许所有访问
        initParams.put("allow","");
        // 拒绝哪个IP地址访问
        initParams.put("deny","192.168.43.93");
        // 设置初始化参数
        bean.setInitParameters(initParams);
        return bean;
    }

    // 2、配置一个web监控的 WebStatFilter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
        initParams.put("exclusions","*.js,*.css,*.img,/druid/*");
        // 设置初始化参数
        bean.setInitParameters(initParams);
        //      "/*"  表示过滤所有请求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

上一篇:springboot与数据访问


下一篇:Spring Boot 1.5集成Druid