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日

相关文章

  • Java Predicate及Consumer接口函数代码实现解析

    Java中的Predicate和Consumer是两种常用的函数式接口,它们可以让我们编写更为简洁、灵活的代码,特别是在处理集合、流等数据时非常有用。 Predicate Predicate可以理解为谓词或者断言,它接受一个输入参数,返回一个布尔类型的值。通常情况下,我们使用Predicate来过滤集合或者流中的数据。 下面是Predicate接口的定义: …

    Java 2023年5月26日
    00
  • java通过MySQL驱动拦截器实现执行sql耗时计算

    首先让我解释一下MySQL驱动拦截器。MySQL驱动拦截器是通过JDBC驱动程序提供的一种扩展机制,以拦截JDBC API调用,从而可以在执行JDBC操作之前和之后添加自定义逻辑。使用MySQL驱动拦截器,我们可以实现一些非常有用的功能,例如,计算SQL执行时间、SQL量级统计、检测SQL注入等。 接下来,我将详细描述如何使用Java和MySQL驱动拦截器来…

    Java 2023年5月20日
    00
  • 实现将Web应用部署到Tomcat根目录的三种方法

    当我们开发一个Web应用并且想要将其部署到Tomcat服务器的根目录时,可以采用以下三种方法: 方法一:部署WAR包到Tomcat的webapps目录下 使用Maven或Gradle等构建工具将Web应用打包成WAR包,或手动打包成WAR包。 将WAR包重命名为ROOT.war,并将其复制到Tomcat的webapps目录下。 启动Tomcat服务器,Tom…

    Java 2023年5月19日
    00
  • SpringBoot集成SpringMVC的方法示例

    Spring Boot集成Spring MVC的方法示例 Spring Boot是一个流行的Java框架,可以帮助开发人员快速构建Web应用程序。在Spring Boot应用程序中,集成Spring MVC是一个非常常见的需求。本文将详细介绍Spring Boot集成Spring MVC的方法示例,包括使用注解和XML配置两种方式。 使用注解配置 使用注解配…

    Java 2023年5月15日
    00
  • 详解从0开始搭建微信小程序(前后端)的全过程

    下面我将详细讲解如何从0开始搭建微信小程序的全过程,包括前后端的搭建。本篇攻略分为以下几个部分: 准备工作 搭建后端 搭建前端 示例说明 总结 一、准备工作 在开始之前,你需要安装以下几个软件: Node.js:用于编写后端代码和运行前端开发工具 MySQL:用于存储后端数据 微信开发者工具:用于编写和运行小程序前端代码 在安装完成后,你需要创建一个新的小程…

    Java 2023年5月23日
    00
  • Tomcat 多站点配置详解及实现方法

    下面是关于 “Tomcat 多站点配置详解及实现方法” 的完整攻略,包含以下内容: 一、前提条件 在进行 Tomcat 多站点配置前,需要提前了解以下几个知识点: Tomcat 的部署方式 基本的 Tomcat 目录结构 虚拟主机的概念 DNS 解析的原理和流程 二、基本步骤 Tomcat 多站点配置的基本流程如下: 创建虚拟主机配置 在 Tomcat 的 …

    Java 2023年5月19日
    00
  • SpringBoot四大神器之Actuator的使用小结

    Spring Boot四大神器之Actuator的使用小结 Spring Boot Actuator是Spring Boot的一个扩展模块,提供了一组用于监控和管理Spring Boot应用程序的端点。在本文中,我们将详细讲解Actuator的使用方法和常用端点。 添加依赖 首先,我们需要在Maven项目中添加Actuator的依赖关系。我们可以使用以下依赖…

    Java 2023年5月15日
    00
  • JAVA中SpringBoot启动流程分析

    以下是详细的Java中SpringBoot启动流程分析。 1. SpringBoot启动流程概述 SpringBoot是一种快速构建Spring应用的工具,其启动过程分为以下几个步骤: 首先,通过maven或gradle的构建工具编译项目代码,并将SpringBoot框架及相关依赖集成进项目中。 接着,在启动类中通过SpringApplication.run…

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