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日

相关文章

  • 微信小程序登陆注册功能的实现代码

    接下来我将详细讲解微信小程序登陆注册功能的实现代码攻略。 一、前置知识 在实现微信小程序的登陆注册功能前,我们需要掌握一些基础知识。 WXML:微信小程序的模板语言,用于构建页面结构。 WXSS:微信小程序的样式语言,用于设置页面样式。 JavaScript:实现小程序的逻辑处理和数据存储。 云开发:微信小程序提供的一种快速开发后端服务的开发方式,包含云函数…

    Java 2023年5月23日
    00
  • C#、ASP.NET通用扩展工具类之TypeParse

    首先,我们先明确一下要讲解的主题:TypeParse类,它是C#和ASP.NET通用的扩展工具类,可以方便地进行数据类型转换。 TypeParse类概述 TypeParse类可以把字符串转化为目标类型的对象。它支持许多常用的类型,如int、float、DateTime、TimeSpan、Guid等等,而且它甚至支持将字符串转化成任意类型的枚举类型。 使用方法…

    Java 2023年5月19日
    00
  • springboot+springJdbc+postgresql 实现多数据源的配置

    实现多数据源的配置通常需要以下几个步骤: 引入相关依赖 配置多个数据源 配置对应的JdbcTemplate 使用不同的数据源来操作数据库 以下是具体的步骤和代码示例: 引入相关依赖 在项目中引入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> &l…

    Java 2023年6月16日
    00
  • Tomcat 类加载器的实现方法及实例代码

    Tomcat 是一款使用 Java 语言开发的开源 Web 服务器,它采用了各种技术实现了高效地处理 Web 请求和 Web 应用的能力。其中,Tomcat 类加载器是 Tomcat 系统中的一个重要组件,主要负责负责动态增加或删除各个 Web 应用的类库,为其中运行的代码提供类加载服务。下面,我们将详细讲解 Tomcat 类加载器的实现方法及实例代码。 T…

    Java 2023年6月15日
    00
  • 详解Java8 新特性之日期API

    下面我将为您详细讲解 “详解Java8 新特性之日期API” 的完整攻略。 1. 了解Java8 中的日期API Java8中一项重要的变化就是提供了新的日期API。Java 8中引入了新的日期API是为了弥补旧API中存在的一些问题。使用旧的日期API中存在的问题包括不可变性、线程安全性和性能问题。Java 8中的新的日期API弥补了这些问题,并在操作日期…

    Java 2023年5月20日
    00
  • Java上传文件到服务器端的方法

    关于Java上传文件到服务器端的方法,主要有以下两种方式: 方式一:使用原生java.net.URLConnection API上传文件 ==Step 1:== 前端HTML代码中,增加文件上传控件(input type=”file”) <form method="post" action="http://localhos…

    Java 2023年6月2日
    00
  • Spring源码解析容器初始化构造方法

    关于 Spring 源码解析容器初始化构造方法的攻略,大致可以按照以下步骤进行: 了解 Spring 容器的初始化流程和各个组件 Spring 容器初始化的主要步骤包括:加载配置文件、解析配置文件、创建 BeanDefinition 对象、注册 BeanDefinition 对象、Bean 的实例化、Bean 的依赖注入、Bean 的初始化、容器销毁等。在容…

    Java 2023年5月19日
    00
  • Java中URL传中文时乱码的解决方法

    一、问题描述在Java中进行URL传参时,可能会遇到中文乱码的问题。这里提供一种解决方法。 二、解决方法1.使用URLEncoder和URLDecoder实现编码和解码在请求参数中传入中文时,需要使用URLEncoder对中文进行编码。例如:我们需要向http://www.example.com/Servlet?name=”张三” 这个地址中传入中文参数,可…

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