Spring Boot使用Druid连接池

简介: Druid是Java语言中最好的数据库连接池。Druid相比于其他的数据库连接池,有两大特性:监控数据库,有利于分析线上数据库问题更容易扩展,同时也很高效。

Druid是Java语言中最好的数据库连接池。Druid相比于其他的数据库连接池,有两大特性:

  • 监控数据库,有利于分析线上数据库问题
  • 更容易扩展,同时也很高效。

今天演示一下Spring Boot集成Druid。

实战

  1. 添加Maven依赖。
    Spring Boot版本使用的是1.x的,2.x的版本druid starter还不支持。不过自定义也是没问题的。

        <!--starter-web 方便我们查看效果-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--使用Mybatis也可以,druid提供的只是连接池-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.6</version>
        </dependency>

img_9c61f4c35e57b2dc59b25de1fa29c6c7.png
image.png
  1. 配置Druid

Druid应用的配置。

server:
  port: 9011
  
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    druid:
      initial-size: 5
      max-active: 10
      min-idle: 5
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      validation-query: select 1
      validation-query-timeout: 60000
      test-on-borrow: false
      test-on-return: false
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      filter:
        stat:
          log-slow-sql: true
          db-type: mysql
          slow-sql-millis: 2000
      stat-view-servlet:
        login-username: druid
        login-password: druid
        allow: 127.0.0.1
        url-pattern: /druid/*
      username: root
      password: 123456
      url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8

通过JavaBean的配置更灵活一些,我们通过JavaBean来配置。

@Configuration
public class DruidConfig {

    @Bean
    public JdbcTemplate jdbcTemplate(){
        return new JdbcTemplate(druidDataSource());
    }

    // ConfigurationProperties可以直接把应用配置的spring.datasource.druid属性开头的值注入到DruidDataSource中
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean(initMethod = "init",destroyMethod = "close")
    public DruidDataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        
        // 添加druid的监控过滤器,当前只演示监控的功能,因此只有一个过滤器,可以实现多个过滤器
        LinkedList<Filter> filtersList = new LinkedList();
        filtersList.add(filter());
        druidDataSource.setProxyFilters(filtersList);
        
        return druidDataSource;
    }


    @Bean
    public Filter filter(){
        StatFilter statFilter = new StatFilter();
        // SQL执行时间超过2s种的被判定为慢日志
        statFilter.setSlowSqlMillis(2000);
        //显示慢日志
        statFilter.setLogSlowSql(true);
        //合并SQL,有时,一些相同的慢日志过多影响阅读,开启合并功能
        statFilter.setMergeSql(true);
        return statFilter;
    }

    // 监控的面板
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
       // 注册自己的Sevlet
        return new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    }

}
  1. 新建SQL执行测试
    使用JDBCTeplate选取数据库中的数据,我们只是演示Druid的监控效果。
@RestController
@SpringBootApplication
public class DaoApplication {

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

    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping("/test")
    public List test(){
        final List<Integer> idList = new LinkedList<Integer>();
        jdbcTemplate.query("select * from sh_test1", new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet rs) throws SQLException {
                  idList.add(rs.getInt(1));
            }
        });

        return idList;
    }

}
  1. 运行查看效果


    img_1aab2cad0f355bc8fb6585256c48264a.png
    image.png

    img_aa11ce1c779d5335f226295843a919c9.png
    image.png

    img_243035de715b3459f9daf21eab8de39a.png
    image.png
  1. 演示完毕
    到这一步,Druid已经可以在Spring Boot中使用了,Druid提供了很多监控的选项,文章篇幅有限, 只介绍一下Druid集成Spring Boot的用法。

最后

这篇文章演示了一下Druid在SpringBoot中的使用。有关Druid的使用请看下面的参考。

参考

相关文章
|
4月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
3天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
81 17
Spring Boot 两种部署到服务器的方式
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
104 4
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
65 2
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
119 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
druid Java Maven
|
7月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
85 0
|
3月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
104 2
|
5月前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
1171 3
|
6月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
341 6