springboot的Druid数据源使用

Druid数据源的介绍

java程序大部分都要访问数据库,为了提高数据库访问效率,不得不使用数据库连接池。

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

Druid数据库连接池很好的监控池和sql的执行情况。

Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 HikariDriud 都是当前 Java Web 上最优秀的数据源,我们来重点介绍 Spring Boot 如何集成 Druid 数据源,如何实现数据库监控。

  1. 引入Druid依赖

      <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.2.8</version>
       </dependency>
    
  2. 配置文件

    使用Druid数据源,首先要更改数据源类型,springboot默认的数据源类型是Hikari

    spring:
      datasource:
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
        #有些版本可能会有时区异常serverTimezone
        url: jdbc:mysql://localhost:3306/person?useUnicode=true&characterEncoding=utf-8
        #更改数据源
        type: com.alibaba.druid.pool.DruidDataSource
        #配置Druid数据源
        druid:
          initialSize: 5  #初始化建立物理连接的个数
          minIdle: 5	#最小连接池数量
          maxActive: 20   #最大连接池数量
            # 配置获取连接等待超时的时间(毫秒)
          maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          timeBetweenEvictionRunsMillis: 60000
            # 配置有一个连接在连接池中的最小生存时间,单位是毫秒
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 1 FROM DUAL
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
            # 打开PSCache,指定每个连接上PSCache的大小
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
            # 配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
          filters: stat, wall, log4j
            # 通过connectProperties属性来打开mergeSql功能,慢SQL记录
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    
  3. 导入log4j,使用日志

    <dependency>
                <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
                <version>1.2.12</version>
     </dependency>
    
  4. 为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性;

    @Configuration
    public class druidConfig {
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druidDataSource(){
            return  new DruidDataSource();
        }
        @Bean
        //实现后台监控
        public ServletRegistrationBean statViewServletRegistrationBean(){
            ServletRegistrationBean registrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    
            Map<String,String> paramter=new HashMap<>();
            //设置后台登录账号
            registrationBean.addInitParameter("loginUsername", "wq");
            registrationBean.addInitParameter("loginPassword","123");
            //允许谁能访问
            registrationBean.addInitParameter("allow", "");
            //禁止谁能访问
            registrationBean.addInitParameter("deny", "172.64.56.5");
    
            return registrationBean;
        }
        public FilterRegistrationBean webStatFilterRegistrationBean(){
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            WebStatFilter filter = new WebStatFilter();
            registrationBean.setFilter(filter);
            //对所有请求进行监控处理
            registrationBean.addUrlPatterns("/*");
            //排除名单,对他们不处理
            registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return registrationBean;
        }
    }
    
    
posted @   阿落小世界  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示