springboot项目整合druid数据库连接池的实现

下面是 Spring Boot 项目整合 Druid 数据库连接池的实现的完整攻略。

1. 引入 Druid 依赖

在Maven或Gradle项目中,需要在项目依赖中引入 Druid 数据库连接池的依赖:

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

2. 配置 Druid 数据库连接池

在 application.yml(或 application.properties)中添加以下配置,进行 Druid 数据库连接池的基本配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    # Druid 连接池相关配置
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat, wall, log4j
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

其中,

  • spring.datasource.type 指定了 Druid 数据源的类型。
  • spring.datasource.urlspring.datasource.usernamespring.datasource.passwordspring.datasource.driver-class-name 分别对应数据库连接的 URL、用户名、密码和驱动类。
  • druid.* 则是 Druid 数据源的相关配置,这里配置了初始连接数、最小闲置连接数、最大活跃连接数、最长等待时间(毫秒)、连接保持时间、连接校验 SQL(查询一个假表)以及其他一些配置项,可以根据实际情况进行调整。

3. 配置 Druid 监控页面

要使用 Druid 的监控页面,需要先在 Spring Boot 项目中配置一个 Servlet:

@WebServlet(urlPatterns = "/druid/*",
    initParams = {
        @WebInitParam(name = "loginUsername", value = "admin"), // Druid 监控页面登录用户名
        @WebInitParam(name = "loginPassword", value = "admin")  // Druid 监控页面登录密码
    })
public class DruidStatViewServlet extends StatViewServlet {

}

然后再配置一个 Filter,用于对 Druid 的监控统计功能进行配置:

@WebFilter(filterName = "druidWebStatFilter", 
    urlPatterns = "/*",
    initParams = {
        @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") // 忽略资源
    })
public class DruidWebStatFilter extends WebStatFilter {

}

这两个类需要在 Spring Boot 项目中进行注册,可以采用以下两种方法:

(1)在应用主类中实现 ServletRegistrationBeanFilterRegistrationBean@Bean 方法:

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

    @Bean
    public ServletRegistrationBean druidStatViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new DruidStatViewServlet(), "/druid/*");
        // 配置登录名密码是否能修改
        servletRegistrationBean.addInitParameter("allow", "");
        servletRegistrationBean.addInitParameter("deny", "192.168.15.21");
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean druidWebStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        // 忽略静态资源
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

(2)在一个配置类中增加 ServletRegistrationBeanFilterRegistrationBean@Bean 方法:

@Configuration
public class DruidConfig {
    @Bean
    public ServletRegistrationBean druidStatViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new DruidStatViewServlet(), "/druid/*");
        // 配置登录名密码是否能修改
        servletRegistrationBean.addInitParameter("allow", "");
        servletRegistrationBean.addInitParameter("deny", "192.168.15.21");
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean druidWebStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        // 忽略静态资源
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

4. 示例

以下示例演示了如何在 Spring Boot 中使用 Druid 数据库连接池:

@RestController
public class TestController {
    @Autowired
    private DataSource dataSource;

    @GetMapping("/test")
    public List<Map<String, Object>> test() throws SQLException {
        try (Connection conn = dataSource.getConnection()) {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM test");
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            List<Map<String, Object>> list = new ArrayList<>();
            while (rs.next()) {
                Map<String, Object> map = new LinkedHashMap<>(columnCount);
                for (int i = 1; i <= columnCount; i++) {
                    map.put(metaData.getColumnLabel(i), rs.getObject(i));
                }
                list.add(map);
            }
            return list;
        }
    }
}

在该控制器中,使用 @Autowired 注解注入了 DataSource,然后在接口 test() 中使用该数据源进行 SQL 查询操作。

5. 注意事项

在整合 Druid 数据源时需要注意以下几点:

  • 如果采用 Druid 数据库连接池,就不用再进行 HikariCP 或者 Tomcat JDBC Pool 等连接池的配置了。
  • 如果项目使用的数据库连接驱动文档编码与数据库文档编码不同,应在 JDBC URL 中增加 useUnicode=true&characterEncoding=UTF-8 等参数。
  • Druid 监控页面的配置项需要根据实际情况进行调整。
  • Druid 数据源需要自己维护连接池中的连接,以及在应用关闭时关闭连接池中所有的连接,可以使用 Spring Boot 为 Bean 容器管理的数据源自动关闭 DataSource。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot项目整合druid数据库连接池的实现 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • 解决使用security和静态资源被拦截的问题

    解决使用security和静态资源被拦截的问题,需要对Spring Security进行相应的配置。 一、配置Spring Security可以通过以下代码块,实现对Spring Security的配置,主要是开启web_security、关闭跨域保护、开启匿名认证和对静态资源的忽略: @Configuration @EnableWebSecurity pu…

    Java 2023年5月20日
    00
  • Java 实战项目锤炼之在线购书商城系统的实现流程

    Java 实战项目锤炼之在线购书商城系统的实现流程 项目概述 在这个项目中,您将使用Java技术构建一个在线购书商城,允许用户搜索、购买和评论图书。在开发过程中,您将学习并锤炼软件开发的实践技巧,包括需求分析、设计、实现和测试等流程。同时,您还将学到使用Java框架和技术实现Web应用程序的方法。 开发环境 该项目使用以下开发环境: JDK 1.8 Ecli…

    Java 2023年5月31日
    00
  • JAVA 十六进制与字符串的转换

    Java 中可以通过多种方式实现十六进制和字符串之间的转化。本文将介绍两种主要的方法:使用内置类库和字节数组转换。 使用内置类库实现 Java 内置的 Integer、Long 和 Short 等类库提供了十六进制和字符串之间的转化方法。下面是一个示例: // 十六进制转字符串 int hexVal = 0x1F; String hexStr = Integ…

    Java 2023年5月27日
    00
  • java对数组进行排序的方法

    以下是Java对数组进行排序的方法的完整攻略。 1. Java中的排序方法 Java提供了一系列快速且易用的排序方法,可用于对数组进行排序: Arrays.sort(int[] arr): 对整形数组进行快速排序; Arrays.sort(char[] arr): 对字符数组进行快速排序; Arrays.sort(double[] arr): 对双精度浮点型…

    Java 2023年5月20日
    00
  • Spring MVC中Ajax实现二级联动的简单实例

    Spring MVC中Ajax实现二级联动的简单实例 在 Spring MVC 中,我们可以使用 Ajax 实现二级联动。本文将详细讲解 Spring MVC 中 Ajax 实现二级联动的完整攻略,并提供两个示例说明。 1. 创建 Spring MVC 控制器 我们需要创建一个 Spring MVC 控制器,用于处理 Ajax 请求。下面是一个简单的示例: …

    Java 2023年5月18日
    00
  • Java定时器Timer的源码分析

    下面是“Java定时器Timer的源码分析”的完整攻略。 一、概述 java.util.Timer 是一个简单的线程定时器,它允许您在未来一个指定的时间段内执行单个或重复的任务。 Timer 的 API 相对简单,但是它是在单线程中运行的。因此,如果一个任务的执行时间很长,那么以后所有任务的执行都将受到影响。 Timer 类仅仅用于在一个线程中顺序执行执行 …

    Java 2023年5月20日
    00
  • Java实现单例模式的五种方法介绍

    5种Java实现单例模式的方法介绍 在Java编程中,当我们希望某个类只有一个实例存在时,就需要使用单例模式。下面介绍5种Java实现单例模式的方法: 方法1:饿汉式单例模式 这种方式基于classloder机制避免了多线程的同步问题,不过instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,…

    Java 2023年5月18日
    00
  • 浅谈Spring 重定向指南

    下面我会详细讲解“浅谈Spring 重定向指南”的完整攻略。 一、什么是重定向 在Web开发中,我们经常需要将一个URL重定向到另一个URL,这就是重定向。重定向通常用于以下情况: 301重定向:永久重定向,用于将一个URL永久地指向另一个URL。 302重定向:临时重定向,用于将一个URL临时地指向另一个URL。 二、Spring中的重定向实现方式 在Sp…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部