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

yizhihongxing

下面是 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日

相关文章

  • SpringBoot 统一异常处理详解

    让我来详细讲解“SpringBoot 统一异常处理详解”的完整攻略。 1. 异常处理的意义 在我们的应用程序中,异常是不可避免的。这些异常可能是由于用户输入不正确、服务器错误、网络问题等各种原因引起的。当这些异常不被处理时,它们将会导致应用程序无法继续正常运行,严重时甚至会引起系统崩溃。 因此,在我们的应用程序中,为了保证程序的安全性和稳定性,必须对这些异常…

    Java 2023年5月27日
    00
  • java单点登录(SSO)的实现

    下面我将详细讲解Java单点登录(SSO)的实现攻略,主要分为以下几个步骤: 步骤一:准备工作 我们需要准备以下工具和环境: JDK 1.8或以上版本 Maven 3.0或以上版本 Servlet容器,如Tomcat或Jetty Spring Boot 2.0或以上版本 步骤二:配置SSO服务器和客户端 配置SSO服务器我们需要在SSO服务器上做以下配置: …

    Java 2023年5月18日
    00
  • JAVA基础-GUI

    JAVA基础-GUI攻略 1. GUI概述 GUI即图形用户界面(Graphical User Interface),是用户与操作系统的交互界面。在Java中,使用Java Swing和JavaFX等框架来编写GUI应用程序。 Swing是一套Java原生的GUI控件,可以在几乎所有的Java平台上运行。JavaFX是Java平台的一个富客户端平台,提供了可…

    Java 2023年5月19日
    00
  • Mybatis如何配置连接池

    MyBatis可以通过配置连接池来提高数据库操作的性能,下面是配置连接池的详细攻略: 步骤1:添加连接池依赖 在pom.xml文件中添加对连接池的依赖,例如: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId…

    Java 2023年5月20日
    00
  • Hibernate使用hbm.xml配置映射关系解析

    Hibernate是Java平台上的一个对象/关系映射框架,常用于在Java应用程序中访问和管理数据库。在Hibernate中,我们需要使用映射文件将Java对象与数据库表进行映射。其中,hbm.xml文件作为Hibernate映射文件的一种形式,是一种XML格式的文件,这个文件用来描述Java对象与数据库表之间的映射关系。本文将详细讲解如何使用hbm.xm…

    Java 2023年5月20日
    00
  • 详解Java实现拓扑排序算法

    详解Java实现拓扑排序算法 什么是拓扑排序算法 拓扑排序算法是一种用来解决有向图中节点之间依赖关系问题的算法,它可以将有向无环图(DAG)中的所有节点按照一定的规则排序,可以用来确定一组任务的执行顺序,比如编译器可以用拓扑排序来确定源代码的编译顺序。 拓扑排序算法原理 拓扑排序算法基于DAG图,DAG图中每个节点表示一个任务,有向边表示任务之间的依赖关系,…

    Java 2023年5月19日
    00
  • Spring Security自定义认证器的实现代码

    下面我将详细讲解关于Spring Security自定义认证器的实现代码的攻略。 第一步:创建一个自定义的认证器类 在Spring Security中,自定义的认证器需要继承AbstractAuthenticationProcessingFilter类,实现其中的attemptAuthentication方法,该方法用于对用户提交的认证请求进行身份认证。 我…

    Java 2023年6月3日
    00
  • Spring Security代码实现JWT接口权限授予与校验功能

    为了实现JWT接口权限授予与校验功能,我们需要以下步骤: 1. 添加Spring Security和JWT依赖 Spring Security是一个现成的身份验证和授权框架,而JWT是一种安全性较高的身份认证方式。因此,我们需要添加相关依赖来支持这些功能。可以在Maven或Gradle中添加以下依赖: <dependencies> … &lt…

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