• SpringBoot整合Druid


    SpringBoot整合Druid

    系统要求

    Java 8+

    springBoot2.5 +

    创建springBoot项目工程

    导入依赖
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.6</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    编写application.yml
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3307/webapp1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        username: webapp1
        password: webapp1
        type: com.alibaba.druid.pool.DruidDataSource
    
        #Spring Boot 默认是不注入这些属性值的,需要自己绑定
        #druid 数据源专有配置
        # 初始化大小,最小,最大
        initialSize: 5
        minIdle: 5
        maxActive: 200
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        # 用来检测连接是否有效的sql,要求是一个查询语句
        validationQuery: SELECT 1 FROM DUAL
        # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
        testWhileIdle: true
        # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
        testOnBorrow: false
        # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnReturn: false
        # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
        poolPreparedStatements: true
        # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
        max-pool-prepared-statement-per-connection-size: 50
    
        #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
        #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
        #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
        filters: stat,wall,log4j
        # 合并多个DruidDataSource的监控数据
        useGlobalDataSourceStat: true
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    
    编写DruidConfig
    package com.xiang.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/17 23:04
     */
    
    @Configuration
    public class DruidConfig {
    
        /*
           将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
           绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
           @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
           前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
         */
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druidDataSource() {
            return new DruidDataSource();
        }
    
    }
    
    进行测试
    package com.xiang;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    @SpringBootTest
    class SpringBootDatabaseApplicationTests {
        /*该对象是SpringBoot创建的可以对数据进行操作*/
        @Autowired
        JdbcTemplate jdbcTemplate;
        @Autowired
        DataSource dataSource;
    
        @Test
        /**
         * 查询所有
         */
        void contextLoads() {
            List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user;");
            for (Map<String, Object> map : list) {
                System.out.println(map);
            }
            /**
             * 2021-10-17 23:01:06.400  INFO 22684 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
             * {id=1, username=小向, sex=男, age=19, birthday=2000-01-01}
             * {id=2, username=嗨嗨嗨, sex=女, age=0, birthday=null}
             * {id=3, username=小李, sex=男, age=19, birthday=2000-01-01}
             * {id=4, username=小张, sex=男, age=19, birthday=2000-01-01}
             */
        }
    
        @Test
        public void load() {
            System.out.println(dataSource.getClass());
    //        class com.alibaba.druid.pool.DruidDataSource
        }
    
        @Test
        public void DruidDataSource() throws SQLException {
            //看一下默认数据源
            System.out.println(dataSource.getClass());
            //获得连接
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
    
            DruidDataSource druidDataSource = (DruidDataSource) dataSource;
            System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());
            System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());
    
            //关闭连接
            connection.close();
            /**
             * 2021-10-17 23:07:34.254  INFO 18988 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
             * com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3aaa3c39
             * druidDataSource 数据源最大连接数:200
             * druidDataSource 数据源初始化连接数:5
             */
        }
        /**
         * 这个报错 需引入log4j 依赖
         *  Failed to bind properties under 'spring.datasource' to javax.sql.DataSource
         */
    
    }
    
    
    运行结果

    参考文章

    https://segmentfault.com/a/1190000039005979

  • 相关阅读:
    linux上的常用的进程与内存优化命令
    ubuntu 上运行的django 出现No space left on device错误
    openstack 使用pbr配置,setup.cfg的格式与含义
    openstack中安装包与组件
    对drf序列化器的理解
    对商品数据表的理解
    首页广告数据表的理解
    对省市区地址的理解
    对邮箱验证的理解
    用户中心个人信息实现的理解
  • 原文地址:https://www.cnblogs.com/d534/p/15418764.html
Copyright © 2020-2023  润新知