Java 數據庫連接池介紹(3)--DBPool 介紹


DBPool 是一個高效易配置的數據庫連接池,支持 JDBC 4.2,但目前已經不維護了;本文簡單介紹下 DBPool 的使用,文中使用到的軟件版本:Java 1.8.0_191、DBPool 7.0.1、Spring Boot 2.3.12.RELEASE。

1、配置參數

參數 描述
name 連接池名稱
description 描述
driverClassName 驅動名稱
url 連接 url
user 用戶名
password 密碼
passwordDecoderClassName 密碼解密類名,需實現 snaq.db.PasswordDecoder 接口,需要有無參構造方法
minPool 連接池最小連接數
maxPool 連接池最大連接數
maxSize 可以創建的最大連接數
idleTimeout 空閑連接數最大存活時間(秒),0 表示無限制
loginTimeout 創建連接的超時時間(秒)
validatorClassName 校驗類名,需實現 snaq.db.ConnectionValidator 接口,需要有無參構造方法
validatorQuery 校驗查詢語句

詳細說明可參考官網文檔:https://www.snaq.net/software/dbpool/

2、使用

2.1、直接使用

2.1.1、引入依賴

<dependency>
    <groupId>net.snaq</groupId>
    <artifactId>dbpool</artifactId>
    <version>7.0.1</version>
</dependency>

2.1.2、使用例子

package com.abc.demo.general.dbpool;

import snaq.db.DBPoolDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBPoolCase {
    public static void main(String[] args) {
        DBPoolDataSource dbPoolDataSource = new DBPoolDataSource();
        dbPoolDataSource.setName("DBPool連接池");
        dbPoolDataSource.setDescription("DBPool連接池測試");
        dbPoolDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dbPoolDataSource.setUrl("jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8");
        dbPoolDataSource.setUser("root");
        dbPoolDataSource.setPassword("123456");
        dbPoolDataSource.setMinPool(5);
        dbPoolDataSource.setMaxPool(10);
        dbPoolDataSource.setMaxSize(30);
        dbPoolDataSource.setIdleTimeout(3600);
        dbPoolDataSource.setLoginTimeout(60);
        dbPoolDataSource.setValidationQuery("select 1");

        Connection connection = null;
        try {
            connection = dbPoolDataSource.getConnection();
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("select version()");
            if (rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(connection);
        }

        //實際使用中一般是在應用啟動時初始化數據源,應用從數據源中獲取連接;並不會關閉數據源。
        dbPoolDataSource.release();
    }

    private static void close(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2.2、在 SpringBoot 中使用

2.1.1、引入依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath />
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>net.snaq</groupId>
        <artifactId>dbpool</artifactId>
        <version>7.0.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

2.1.2、單數據源

application.yml 配置:

spring:
  datasource:
    dbpool:
      name: DBPool連接池
      description: DBPool連接池測試
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://10.40.9.11:3306/myDb?useUnicode=true&characterEncoding=UTF-8
      user: root
      password: 123456
      min-pool: 5
      max-pool: 10
      max-size: 30
      idle-timeout: 3600
      login-timeout: 60
      validator-query: select 1

數據源配置類:

package com.abc.demo.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import snaq.db.DBPoolDataSource;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Bean("dataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dbpool")
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(DBPoolDataSource.class).build();
    }
}

使用:

@Autowired
private DataSource dataSource;

2.1.3、多數據源

application.yml 配置:

spring:
  datasource:
    dbpool:
      db1:
        name: DBPool連接池1
        description: DBPool連接池測試1
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8
        user: root
        password: 123456
        min-pool: 5
        max-pool: 10
        max-size: 30
        idle-timeout: 3600
        login-timeout: 60
        validator-query: select 1
      db2:
        name: DBPool連接池2
        description: DBPool連接池測試2
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://10.40.9.12:3306/mydb?useUnicode=true&characterEncoding=UTF-8
        user: root
        password: 123456
        min-pool: 5
        max-pool: 10
        max-size: 30
        idle-timeout: 3600
        login-timeout: 60
        validator-query: select 1

數據源配置類:

package com.abc.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import snaq.db.DBPoolDataSource;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Bean("dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource.dbpool.db1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().type(DBPoolDataSource.class).build();
    }

    @Bean("dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.dbpool.db2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().type(DBPoolDataSource.class).build();
    }
}

使用:

@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;

@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM