亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?數(shù)據(jù)庫連接池Druid?的介紹

 更新時(shí)間:2021年11月23日 11:40:24   作者:詠吟  
這篇文章主要給大家分享的是?Java?數(shù)據(jù)庫連接池Druid?的介紹,Druid是一個(gè)JDBC組件,它包括三部分:?DruidDriver?代理Driver,能夠提供基于Filter-Chain模式的插件體系。?DruidDataSource?高效可管理的數(shù)據(jù)庫連接池,下面來看看文中的詳細(xì)內(nèi)容,需要的朋友也可以參考一下

前言:

Druid 連接池是阿里巴巴開源的數(shù)據(jù)庫連接池項(xiàng)目,Druid 為監(jiān)控而生,內(nèi)置強(qiáng)大的監(jiān)控功能,監(jiān)控特性不影響性能,官網(wǎng)地址為:https://github.com/alibaba/druid/wiki/,本文主要介紹 Druid 的基本使用,文中使用到的軟件版本:Java 1.8.0_191、Druid 1.2.8、Spring Boot 2.3.12.RELEASE。

1、配置參數(shù)

Druid 連接池的配置參數(shù)兼容 DBCP,個(gè)別配置的語意有所區(qū)別。

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

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);

        }

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

        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、單數(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: 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、多數(shù)據(jù)源

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

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

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、開啟監(jiān)控功能

Druid 內(nèi)置了一些監(jiān)控,Spring Boot 環(huán)境下通過少量配置就可開啟這些功能。

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 #啟用日志、監(jiān)控統(tǒng)計(jì)、防火墻功能

      web-stat-filter:    #web監(jiān)控配置

        enabled: true

      stat-view-servlet:  #監(jiān)控頁面配置

        enabled: true

        url-pattern: /druid/*

監(jiān)控頁面:

Spring Boot 中集成 Druid 的詳細(xì)說明可以參考官網(wǎng)文檔:https://hub.fastgit.org/alibaba/druid/tree/master/druid-spring-boot-starter

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

相關(guān)文章

  • 詳解spring cloud如何使用spring-test進(jìn)行單元測試

    詳解spring cloud如何使用spring-test進(jìn)行單元測試

    這篇文章主要介紹了spring cloud如何使用spring-test進(jìn)行單元測試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SpringBoot自定義FailureAnalyzer詳解

    SpringBoot自定義FailureAnalyzer詳解

    這篇文章主要介紹了SpringBoot自定義FailureAnalyzer詳解,FailureAnalyzer是一種在啟動(dòng)時(shí)攔截?exception?并將其轉(zhuǎn)換為?human-readable?消息的好方法,包含在故障分析中,需要的朋友可以參考下
    2023-11-11
  • java 虛擬機(jī)深入了解

    java 虛擬機(jī)深入了解

    這篇文章主要介紹了java 虛擬機(jī)深入了解的相關(guān)資料,ava虛擬機(jī)有自己完善的硬體架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng),需要的朋友可以參考下
    2017-03-03
  • 詳解什么是Java線程池的拒絕策略?

    詳解什么是Java線程池的拒絕策略?

    今天給大家總結(jié)一下線程池的拒絕策略,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 基于java配置nginx獲取真實(shí)IP代碼實(shí)例

    基于java配置nginx獲取真實(shí)IP代碼實(shí)例

    這篇文章主要介紹了基于java配置nginx獲取真實(shí)IP代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java訪問者模式實(shí)現(xiàn)優(yōu)雅的對(duì)象結(jié)構(gòu)處理

    Java訪問者模式實(shí)現(xiàn)優(yōu)雅的對(duì)象結(jié)構(gòu)處理

    Java訪問者模式是一種行為型設(shè)計(jì)模式,它通過將數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作分離,實(shí)現(xiàn)對(duì)復(fù)雜對(duì)象結(jié)構(gòu)的處理。它將數(shù)據(jù)結(jié)構(gòu)中的每個(gè)元素都轉(zhuǎn)換為訪問者能夠識(shí)別的形式,從而使得數(shù)據(jù)操作可以在不影響數(shù)據(jù)結(jié)構(gòu)的前提下進(jìn)行擴(kuò)展和變化
    2023-04-04
  • Java使用Optional實(shí)現(xiàn)優(yōu)雅避免空指針異常

    Java使用Optional實(shí)現(xiàn)優(yōu)雅避免空指針異常

    空指針異常(NullPointerException)可以說是Java程序員最容易遇到的問題了。為了解決這個(gè)問題,Java?8?版本中推出了?Optional?類,本文就來講講如何使用Optional實(shí)現(xiàn)優(yōu)雅避免空指針異常吧
    2023-03-03
  • Spring MVC 執(zhí)行流程的簡述

    Spring MVC 執(zhí)行流程的簡述

    這篇文章主要介紹了Spring MVC 執(zhí)行流程的簡述,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    這篇文章主要介紹了Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java多線程解決生產(chǎn)者消費(fèi)者問題

    java多線程解決生產(chǎn)者消費(fèi)者問題

    這篇文章主要介紹了java多線程解決生產(chǎn)者消費(fèi)者問題的方法,實(shí)例分析了java采用多線程的方法解決生產(chǎn)者消費(fèi)者問題的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論