最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 數(shù)據(jù)庫(kù)連接池 DBCP 的介紹

 更新時(shí)間:2021年11月23日 10:26:50   作者:詠吟  
這篇文章主要給大家分享的是 Java 數(shù)據(jù)庫(kù)連接池 DBCP 的介紹, 是 Apache 旗下 Commons 項(xiàng)目下的一個(gè)子項(xiàng)目,提供連接池功能DBCP,下面來(lái)看看文章的具體介紹內(nèi)容吧,需要的朋友可以參考一下

DBCP(Database connection pooling) 是 Apache 旗下 Commons 項(xiàng)目下的一個(gè)子項(xiàng)目,提供連接池功能;本文主要介紹 DBCP 的基本使用,文中使用到的軟件版本:Java 1.8.0_191、DBCP 2.9.0、Spring Boot 2.3.12.RELEASE。

1、配置參數(shù)

參數(shù) 描述
username 用戶名
password 密碼
url 連接 url
driverClassName 驅(qū)動(dòng)名稱
connectionProperties

連接屬性,格式為: [propertyName=property;]*
"user" and "password" 將被除外,所以在此不需要包含這兩個(gè)屬性。

參數(shù) 默認(rèn)值 描述
?defaultAutoCommit ?驅(qū)動(dòng)的默認(rèn)值 ?是否自動(dòng)提交
?defaultReadOnly ?驅(qū)動(dòng)的默認(rèn)值 ?是否只讀
?defaultTransactionIsolation ?驅(qū)動(dòng)的默認(rèn)值

默認(rèn)的事務(wù)隔離級(jí)別
NONE、READ_COMMITTED、READ_UNCOMMITTED、
REPEATABLE_READ、SERIALIZABLE

?defaultCatalog ?

默認(rèn)的 catalog。(目錄,類似于模式名,但比模式名更加抽象;
Oracle,MySQL 不支持,MS SQL Server = 數(shù)據(jù)庫(kù)名)

?cacheState ?true ?是否緩存狀態(tài)信息
?defaultQueryTimeout ?null ?默認(rèn)查詢時(shí)間
?enableAutoCommitOnReturn ?true ?連接歸還到池時(shí),是否設(shè)置為自動(dòng)提交
?rollbackOnReturn ?true

如果設(shè)置為 true,則連接歸還到連接池時(shí),
如果 auto commit=true 且 read-only=false,則會(huì)自動(dòng)執(zhí)行一次 rollback()。

?參數(shù) 默認(rèn)值? 描述
?initialSize ?0 初始連接數(shù)
?maxTotal ?8 最大連接數(shù);負(fù)數(shù)表示沒(méi)有限制
?maxIdle ?8 最大空閑連接數(shù),多余的空閑連接將被釋放;負(fù)數(shù)表示沒(méi)有限制
?minIdle ?0 最小空閑連接數(shù),如果不足則新的空閑連接將被創(chuàng)建。
?maxWaitMillis ?indefinitely 從連接池獲取連接,最大等待時(shí)間,超過(guò)該時(shí)間將拋出異常;-1 表示無(wú)限期
參數(shù) 默認(rèn)值 描述
validationQuery ?

連接池返回連接給調(diào)用者前用來(lái)校驗(yàn)的查詢sql。
如果指定,則這個(gè)查詢 SQL 必須至少返回一行數(shù)據(jù);如果沒(méi)有指定,則通過(guò)調(diào)用 isValid() 方法進(jìn)行校驗(yàn)。

validationQueryTimeout no timeout 驗(yàn)證查詢超時(shí)時(shí)間(秒)。如果設(shè)置為正數(shù),那么通過(guò) setQueryTimeOut()方法來(lái)設(shè)置查詢的超時(shí)時(shí)間。
testOnCreate false 連接創(chuàng)建后,是否驗(yàn)證有效性
testOnBorrow true 從連接池獲取連接時(shí),是否驗(yàn)證有效性
testOnReturn false 連接返回連接池時(shí),是否驗(yàn)證有效性
testWhileIdle false 連接空閑時(shí),是否驗(yàn)證有效性;如果驗(yàn)證失敗,則丟棄該連接。
timeBetweenEvictionRunsMillis -1 校驗(yàn)空閑連接的時(shí)間周期,非正表示不驗(yàn)證
numTestsPerEvictionRun 3 每次校驗(yàn)空閑連接的個(gè)數(shù)
minEvictableIdleTimeMillis 1000 * 60 * 30 空閑連接至少多長(zhǎng)時(shí)間后,才會(huì)被校驗(yàn)
softMinEvictableIdleTimeMillis -1 空閑連接至少多長(zhǎng)時(shí)間后,才會(huì)被校驗(yàn);還需滿足"空閑連接數(shù)>=minIdle"
maxConnLifetimeMillis -1 連接存活的最大時(shí)間;如果設(shè)置為非正數(shù),則存活時(shí)間是無(wú)限的
logExpiredConnections true 過(guò)期的連接被連接池關(guān)閉時(shí),是否寫日志
connectionInitSqls null 連接第一次創(chuàng)建時(shí),執(zhí)行的初始化 SQL
lifo true true 表示獲取連接時(shí)將返回最后返還連接池的連接(后進(jìn)先出);false,則相反(先進(jìn)先出)。
參數(shù) 默認(rèn)值 描述
poolPreparedStatements false 預(yù)編譯語(yǔ)句是否池化
maxOpenPreparedStatements unlimited 最大打開的預(yù)處理語(yǔ)句,負(fù)數(shù)表示沒(méi)有限制
參數(shù) 默認(rèn)值 描述
accessToUnderlyingConnectionAllowed false 是否允許訪問(wèn)底層連接

如果允許,可以使用下面的代碼來(lái)訪問(wèn)底層連接:

Connection conn = ds.getConnection();

Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();

...

conn.close()
參數(shù) 默認(rèn)值 描述
removeAbandonedOnMaintenance
removeAbandonedOnBorrow
?false

是否刪除泄露的連接;如果超過(guò)一個(gè)活動(dòng)連接未使用的時(shí)間超過(guò) removeAbandonedTimeout,則是一個(gè)泄露的連接。
創(chuàng)建 Statement,PreparedStatement,CallableStatement 或使用這些對(duì)象執(zhí)行一個(gè)查詢都會(huì)重置連接的上傳使用時(shí)間。
removeAbandonedOnMaintenance:空閑連接校驗(yàn)時(shí)是否回收泄露的連接,要使啟用該設(shè)置需把 timeBetweenEvictionRunsMillis 設(shè)置為整數(shù)
removeAbandonedOnBorrow:從連接池獲取連接時(shí)是否回收泄露的連接,要使啟用該設(shè)置還需滿足 'getNumActive() > getMaxTotal() - 3 and getNumIdle() < 2'

removeAbandonedTimeout ?300 ?連接泄露的超時(shí)時(shí)間(秒)
logAbandoned false ?連接刪除時(shí)是否打印堆棧信息
abandonedUsageTracking false 如果設(shè)置為 true,數(shù)據(jù)庫(kù)連接每執(zhí)行一個(gè)方法都會(huì)打印堆棧信息
參數(shù) 默認(rèn)值 描述
fastFailValidation false

是否快速失敗驗(yàn)證;如果設(shè)置為 true,當(dāng)發(fā)生致命異常時(shí),不再執(zhí)行 isValid(),也不去執(zhí)行驗(yàn)證查詢語(yǔ)句。致命的異常碼有:
57P01 (ADMIN SHUTDOWN)
57P02 (CRASH SHUTDOWN)
57P03 (CANNOT CONNECT NOW)
01002 (SQL92 disconnect error)
JZ0C0 (Sybase disconnect error)
JZ0C1 (Sybase disconnect error)
Any SQL_STATE code that starts with "08"
要覆蓋默認(rèn)的異常代碼,可以設(shè)置 disconnectionSqlCodes 屬性。

disconnectionSqlCodes null 自定義異常代碼
jmxName ? 注冊(cè)連接池的 jmx 名稱

詳細(xì)的配置說(shuō)明可參考官網(wǎng)文檔:http://commons.apache.org/proper/commons-dbcp/configuration.html。

2、使用

2.1、直接使用

2.1.1、引入依賴

<dependency>

  <groupId>org.apache.commons</groupId>

  <artifactId>commons-dbcp2</artifactId>

  <version>2.9.0</version>

</dependency>

2.1.2、使用例子

package com.abc.demo.general.dbpool;

import org.apache.commons.dbcp2.BasicDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBCPCase {

    public static void main(String[] args) {

        BasicDataSource basicDataSource = new BasicDataSource();

        basicDataSource.setUrl("jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8");

        basicDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");

        basicDataSource.setUsername("root");

        basicDataSource.setPassword("123456");

        basicDataSource.setMaxTotal(20);

        basicDataSource.setMinIdle(5);

        Connection connection = null;

        Statement st = null;

        ResultSet rs  = null;

        try {

            connection = basicDataSource.getConnection();

            st = connection.createStatement();

            rs = st.executeQuery("select version()");

            if (rs.next()) {

                System.out.println(rs.getString(1));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            close(connection);

        }

        try {

            //實(shí)際使用中一般是在應(yīng)用啟動(dòng)時(shí)初始化數(shù)據(jù)源,應(yīng)用從數(shù)據(jù)源中獲取連接;并不會(huì)關(guān)閉數(shù)據(jù)源。

            basicDataSource.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }



    private static void close(Connection connection) {

        if (connection != null) {

            try {

                connection.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

2.2、在 SpringBoot 中使用

2.2.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>org.apache.commons</groupId>

        <artifactId>commons-dbcp2</artifactId>

        <version>2.9.0</version>

    </dependency>

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

    </dependency>

</dependencies>

2.2.2、單數(shù)據(jù)源

application.yml 配置:

spring:

  datasource:

    driver-class-name: com.mysql.cj.jdbc.Driver

    url: jdbc:mysql://10.40.9.11:3306/myDb?useUnicode=true&characterEncoding=UTF-8

    username: root

    password: 123456

    type: org.apache.commons.dbcp2.BasicDataSource

    dbcp2:

      max-total: 20

      max-idle: 5

使用:

@Autowired

private DataSource dataSource;

2.2.3、多數(shù)據(jù)源

application.yml 配置:

spring:

  datasource:

    dbcp2:

      db1:

        driver-class-name: com.mysql.cj.jdbc.Driver

        url: jdbc:mysql://10.40.9.11:3306/myDb?useUnicode=true&characterEncoding=UTF-8

        username: root

        password: 123456

        max-total: 20

        max-idle: 5

      db2:

        driver-class-name: com.mysql.cj.jdbc.Driver

        url: jdbc:mysql://10.40.9.12:3306/myDb?useUnicode=true&characterEncoding=UTF-8

        username: root

        password: 123456

        max-total: 20

        max-idle: 5

數(shù)據(jù)源配置類:

package com.abc.demo.config;

import org.apache.commons.dbcp2.BasicDataSource;

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 javax.sql.DataSource;



@Configuration

public class DataSourceConfig {

    @Bean("dataSource1")

    @ConfigurationProperties(prefix = "spring.datasource.dbcp2.db1")

    public DataSource dataSource1() {

        return DataSourceBuilder.create().type(BasicDataSource.class).build();

    }

    @Bean("dataSource2")

    @ConfigurationProperties(prefix = "spring.datasource.dbcp2.db2")

    public DataSource dataSource2() {

        return DataSourceBuilder.create().type(BasicDataSource.class).build();

    }

}

使用:

@Autowired

@Qualifier("dataSource1")

private DataSource dataSource1;

@Autowired

@Qualifier("dataSource2")

private DataSource dataSource2;

到此這篇關(guān)于 Java 數(shù)據(jù)庫(kù)連接池 DBCP 的介紹的文章就介紹到這了,更多相關(guān) Java? 連接池 DBCP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中@Test的介紹和使用案例

    SpringBoot中@Test的介紹和使用案例

    SpringBoot提供了方便的測(cè)試功能,可以很容易地進(jìn)行單元測(cè)試和集成測(cè)試,這篇文章主要介紹了SpringBoot中@Test的介紹和使用,需要的朋友可以參考下
    2023-08-08
  • Mac系統(tǒng)搭建JDK及JMETER過(guò)程解析

    Mac系統(tǒng)搭建JDK及JMETER過(guò)程解析

    這篇文章主要介紹了Mac系統(tǒng)搭建JDK及JMETER過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • idea使用Mybatis逆向工程插件詳情

    idea使用Mybatis逆向工程插件詳情

    這篇文章主要介紹了idea使用Mybatis逆向工程插件詳情,首先使用mybatis連接數(shù)據(jù)庫(kù)接著添加連接的mysql的信息,測(cè)試鏈接等過(guò)程,更多過(guò)程了解請(qǐng)參考下面文章的詳細(xì)內(nèi)容
    2022-01-01
  • 解決springboot中@DynamicUpdate注解無(wú)效的問(wèn)題

    解決springboot中@DynamicUpdate注解無(wú)效的問(wèn)題

    這篇文章主要介紹了解決springboot中@DynamicUpdate注解無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺析Java 數(shù)據(jù)結(jié)構(gòu)常用接口與類

    淺析Java 數(shù)據(jù)結(jié)構(gòu)常用接口與類

    本篇文章主要介紹了Java中的數(shù)據(jù)結(jié)構(gòu),Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。需要的朋友可以參考下
    2017-04-04
  • SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java項(xiàng)目的目錄結(jié)構(gòu)詳解

    Java項(xiàng)目的目錄結(jié)構(gòu)詳解

    本文主要介紹了Java項(xiàng)目的目錄結(jié)構(gòu)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java+Eclipse+Selenium環(huán)境搭建的方法步驟

    Java+Eclipse+Selenium環(huán)境搭建的方法步驟

    這篇文章主要介紹了Java+Eclipse+Selenium環(huán)境搭建的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用

    Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用

    Java語(yǔ)言的數(shù)組是一個(gè)由固定長(zhǎng)度的特定類型元素組成的集合,它們的數(shù)據(jù)類型必須相同,聲明變量的時(shí)候,必須要指定參數(shù)類型,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java中的Web MVC簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中的Web MVC簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    MVC模型是一種架構(gòu)型的模式,本身不引入新功能,只是幫助我們將開發(fā)的結(jié)構(gòu)組織的更加合理,使展示與模型分離、流程控制邏輯、業(yè)務(wù)邏輯調(diào)用與展示邏輯分離
    2017-09-09

最新評(píng)論

启东市| 五常市| 永登县| 陆良县| 白沙| 肥城市| 彭山县| 剑河县| 清水县| 宁都县| SHOW| 甘孜| 房产| 班玛县| 岫岩| 合肥市| 临澧县| 剑川县| 大渡口区| 察雅县| 高唐县| 绍兴县| 饶阳县| 英德市| 昌平区| 丹寨县| 开封市| 苗栗县| 安阳县| 琼中| 安陆市| 冀州市| 沙坪坝区| 徐闻县| 普兰店市| 保康县| 广灵县| 隆回县| 泾源县| 如东县| 彭泽县|