中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java數據庫連接池Druid的配置參數有哪些

發布時間:2021-11-23 13:37:24 來源:億速云 閱讀:245 作者:iii 欄目:開發技術

這篇文章主要介紹“Java數據庫連接池Druid的配置參數有哪些”,在日常操作中,相信很多人在Java數據庫連接池Druid的配置參數有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java數據庫連接池Druid的配置參數有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1、配置參數

Druid 連接池的配置參數兼容 DBCP,個別配置的語意有所區別。

配置缺省值說明
name 配置這個屬性的意義在于,如果存在多個數據源,監控的時候可以通過名字來區分開來。如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCode(this)。配置此屬性版本至少為 1.0.5,低于該版本設置 name 會出錯。
url 連接數據庫的 url
username 連接數據庫的用戶名
password 連接數據庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。
driverClassName根據url自動識別這一項可配可不配,如果不配置 Druid 會根據 url 自動識別 dbType,然后選擇相應的 driverClassName
initialSize0初始化時建立物理連接的個數。初始化發生在顯示調用 init 方法,或者第一次 getConnection 時
maxActive8最大連接池數量
maxIdle8已經不再使用,配置了也沒效果
minIdle 最小連接池數量
maxWait 獲取連接時最大等待時間,單位毫秒。配置了 maxWait 之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock 屬性為 true 使用非公平鎖。
poolPreparedStatementsfalse是否緩存 preparedStatement,也就是 PSCache。PSCache 對支持游標的數據庫性能提升巨大,比如說 oracle。在 mysql 下建議關閉。
maxPoolPreparedStatementPerConnectionSize-1要啟用 PSCache,必須配置大于 0,當大于 0 時,poolPreparedStatements 自動觸發修改為 true。在 Druid 中,不會存在 Oracle下 PSCache 占用內存過多的問題,可以把這個數值配置大一些,比如說 100
validationQuery 用來檢測連接是否有效的 sql,要求是一個查詢語句,常用select 'x'。如果 validationQuery 為 null,testOnBorrow、testOnReturn、testWhileIdle 都不會起作用。
validationQueryTimeout 單位:秒,檢測連接是否有效的超時時間。底層調用 jdbc Statement對象的 void setQueryTimeout(int seconds) 方法
testOnBorrowtrue申請連接時執行 validationQuery 檢測連接是否有效,做了這個配置會降低性能。
testOnReturnfalse歸還連接時執行 validationQuery 檢測連接是否有效,做了這個配置會降低性能。
testWhileIdlefalse建議配置為 true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于 timeBetweenEvictionRunsMillis,執行validationQuery 檢測連接是否有效。
keepAlivefalse
(1.0.28)
連接池中的 minIdle 數量以內的連接,空閑時間超過 minEvictableIdleTimeMillis,則會執行 keepAlive 操作。
timeBetweenEvictionRunsMillis1分鐘(1.0.14)有兩個含義:
1) Destroy 線程會檢測連接的間隔時間,如果連接空閑時間大于等于 minEvictableIdleTimeMillis 則關閉物理連接。
2) testWhileIdle 的判斷依據,詳細看 testWhileIdle 屬性的說明
numTestsPerEvictionRun30分鐘(1.0.14)不再使用,一個 DruidDataSource 只支持一個 EvictionRun
minEvictableIdleTimeMillis 連接保持空閑而不被驅逐的最小時間
connectionInitSqls 物理連接初始化的時候執行的 sql
exceptionSorter根據dbType自動識別當數據庫拋出一些不可恢復的異常時,拋棄連接
filters 屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:
監控統計用的 filter:stat
日志用的 filter:log4j
防御 sql 注入的 filter:wall
proxyFilters 類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了 filters 和 proxyFilters,是組合關系,并非替換關系

2、使用

2.1、直接使用

2.1.1、引入依賴
<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</artifactId>

    <version>1.2.8</version>

</dependency>
2.1.2、使用例子
package com.abc.demo.general.dbpool;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DruidCase {

    public static void main(String[] args) {

        DruidDataSource druidDataSource = new DruidDataSource();

        Connection connection = null;

        try {

            druidDataSource.setName("測試連接池");

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

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

            druidDataSource.setUsername("root");

            druidDataSource.setPassword("123456");

            druidDataSource.setInitialSize(2);

            druidDataSource.setMinIdle(2);

            druidDataSource.setMaxActive(5);

            druidDataSource.setValidationQuery("select 1");

            druidDataSource.setTestWhileIdle(true);

            druidDataSource.setTestOnBorrow(true);

            druidDataSource.setTestOnReturn(false);

            druidDataSource.setMaxWait(6000);

            druidDataSource.setFilters("slf4j");

            connection = druidDataSource.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);

        }

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

        druidDataSource.close();

    }

    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>com.alibaba</groupId>

        <artifactId>druid-spring-boot-starter</artifactId>

        <version>1.2.8</version>

    </dependency>

    <dependency>

        <groupId>mysql</groupId>

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

    </dependency>

</dependencies>
2.1.2、單數據源

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: com.alibaba.druid.pool.DruidDataSource

    druid:

      initial-size: 2

      min-idle: 2

      max-active: 5

      validation-query: select 1

      test-while-idle: true

      test-on-borrow: true

      test-on-return: false

      max-wait: 6000

      filter: slf4j

使用:

@Autowired

private DataSource dataSource;
2.1.3、多數據源

application.yml 配置:

spring:

  datasource:

    druid:

      db1:

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

        url: jdbc:mysql://10.140.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8

        username: root

        password: 123456

        initial-size: 2

        min-idle: 2

        max-active: 5

        validation-query: select 1

        test-while-idle: true

        test-on-borrow: true

        test-on-return: false

        max-wait: 6000

        filter: slf4j

      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

        initial-size: 2

        min-idle: 2

        max-active: 5

        validation-query: select 1

        test-while-idle: true

        test-on-borrow: true

        test-on-return: false

        max-wait: 6000

        filter: slf4j

數據源配置類:

package com.abc.demo.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration

public class DataSourceConfig {

    @Primary

    @Bean("dataSource1")

    @ConfigurationProperties("spring.datasource.druid.db1")

    public DataSource dataSourceOne(){

        return DruidDataSourceBuilder.create().build();

    }



    @Bean("dataSource2")

    @ConfigurationProperties("spring.datasource.druid.db2")

    public DataSource dataSourceTwo(){

        return DruidDataSourceBuilder.create().build();

    }

}

使用:

@Autowired

@Qualifier("dataSource1")

private DataSource dataSource1;



@Autowired

@Qualifier("dataSource2")

private DataSource dataSource2;
2.1.4、開啟監控功能

Druid 內置了一些監控,Spring Boot 環境下通過少量配置就可開啟這些功能。

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: InsYR0ot187!

    type: com.alibaba.druid.pool.DruidDataSource

    druid:

      initial-size: 2

      min-idle: 2

      max-active: 5

      validation-query: select 1

      test-while-idle: true

      test-on-borrow: true

      test-on-return: false

      max-wait: 6000

      filter: slf4j,stat,wall #啟用日志、監控統計、防火墻功能

      web-stat-filter:    #web監控配置

        enabled: true

      stat-view-servlet:  #監控頁面配置

        enabled: true

        url-pattern: /druid/*

監控頁面:

Java數據庫連接池Druid的配置參數有哪些

到此,關于“Java數據庫連接池Druid的配置參數有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郓城县| 雷州市| 荥经县| 五台县| 凯里市| 自贡市| 泰宁县| 永济市| 图木舒克市| 普洱| 泌阳县| 东明县| 新宾| 泰州市| 乌苏市| 萍乡市| 弥勒县| 吉木乃县| 康平县| 南澳县| 临湘市| 班玛县| 陈巴尔虎旗| 贵溪市| 来安县| 大丰市| 偃师市| 同江市| 青阳县| 喀喇沁旗| 阿拉善右旗| 松溪县| 霍州市| 巴里| 望奎县| 宁河县| 潢川县| 晋中市| 石泉县| 潍坊市| 东城区|