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

druid連接池的參數(shù)配置示例全面解析

 更新時(shí)間:2023年09月28日 09:15:17   作者:codecraft  
這篇文章主要為大家介紹了druid連接池的參數(shù)配置示例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本文主要研究一下druid連接池的參數(shù)配置

DruidDataSourceFactory

druid-1.2.11-sources.jar!/com/alibaba/druid/pool/DruidDataSourceFactory.java

public class DruidDataSourceFactory implements ObjectFactory {
    private static final Log LOG = LogFactory.getLog(DruidDataSourceFactory.class);
    static final int UNKNOWN_TRANSACTIONISOLATION = -1;
    public static final String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit";
    public static final String PROP_DEFAULTREADONLY = "defaultReadOnly";
    public static final String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation";
    public static final String PROP_DEFAULTCATALOG = "defaultCatalog";
    public static final String PROP_DRIVERCLASSNAME = "driverClassName";
    public static final String PROP_MAXACTIVE = "maxActive";
    public static final String PROP_MAXIDLE = "maxIdle";
    public static final String PROP_MINIDLE = "minIdle";
    public static final String PROP_INITIALSIZE = "initialSize";
    public static final String PROP_MAXWAIT = "maxWait";
    public static final String PROP_TESTONBORROW = "testOnBorrow";
    public static final String PROP_TESTONRETURN = "testOnReturn";
    public static final String PROP_TIMEBETWEENEVICTIONRUNSMILLIS = "timeBetweenEvictionRunsMillis";
    public static final String PROP_NUMTESTSPEREVICTIONRUN = "numTestsPerEvictionRun";
    public static final String PROP_MINEVICTABLEIDLETIMEMILLIS = "minEvictableIdleTimeMillis";
    public static final String PROP_PHY_TIMEOUT_MILLIS = "phyTimeoutMillis";
    public static final String PROP_TESTWHILEIDLE = "testWhileIdle";
    public static final String PROP_PASSWORD = "password";
    public static final String PROP_URL = "url";
    public static final String PROP_USERNAME = "username";
    public static final String PROP_VALIDATIONQUERY = "validationQuery";
    public static final String PROP_VALIDATIONQUERY_TIMEOUT = "validationQueryTimeout";
    public static final String PROP_INITCONNECTIONSQLS = "initConnectionSqls";
    public static final String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed";
    public static final String PROP_REMOVEABANDONED = "removeAbandoned";
    public static final String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout";
    public static final String PROP_LOGABANDONED = "logAbandoned";
    public static final String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements";
    public static final String PROP_MAXOPENPREPAREDSTATEMENTS = "maxOpenPreparedStatements";
    public static final String PROP_CONNECTIONPROPERTIES = "connectionProperties";
    public static final String PROP_FILTERS = "filters";
    public static final String PROP_EXCEPTION_SORTER = "exceptionSorter";
    public static final String PROP_EXCEPTION_SORTER_CLASS_NAME = "exception-sorter-class-name";
    public static final String PROP_NAME = "name";
    public static final String PROP_INIT = "init";
    private static final String[] ALL_PROPERTIES = {
            PROP_DEFAULTAUTOCOMMIT,
            PROP_DEFAULTREADONLY,
            PROP_DEFAULTTRANSACTIONISOLATION,
            PROP_DEFAULTCATALOG,
            PROP_DRIVERCLASSNAME,
            PROP_MAXACTIVE,
            PROP_MAXIDLE,
            PROP_MINIDLE,
            PROP_INITIALSIZE,
            PROP_MAXWAIT,
            PROP_TESTONBORROW,
            PROP_TESTONRETURN,
            PROP_TIMEBETWEENEVICTIONRUNSMILLIS,
            PROP_NUMTESTSPEREVICTIONRUN,
            PROP_MINEVICTABLEIDLETIMEMILLIS,
            PROP_TESTWHILEIDLE,
            PROP_PASSWORD,
            PROP_FILTERS,
            PROP_URL,
            PROP_USERNAME,
            PROP_VALIDATIONQUERY,
            PROP_VALIDATIONQUERY_TIMEOUT,
            PROP_INITCONNECTIONSQLS,
            PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED,
            PROP_REMOVEABANDONED,
            PROP_REMOVEABANDONEDTIMEOUT,
            PROP_LOGABANDONED,
            PROP_POOLPREPAREDSTATEMENTS,
            PROP_MAXOPENPREPAREDSTATEMENTS,
            PROP_CONNECTIONPROPERTIES,
            PROP_EXCEPTION_SORTER,
            PROP_EXCEPTION_SORTER_CLASS_NAME,
            PROP_INIT,
            PROP_NAME,
            "druid.timeBetweenLogStatsMillis",
            "druid.stat.sql.MaxSize",
            "druid.clearFiltersEnable",
            "druid.resetStatEnable", //
            "druid.notFullTimeoutRetryCount", //
            "druid.maxWaitThreadCount", //
            "druid.failFast", //
            "druid.phyTimeoutMillis", //
            "druid.wall.tenantColumn", //
            "druid.wall.updateAllow", //
            "druid.wall.deleteAllow", //
            "druid.wall.insertAllow", //
            "druid.wall.selelctAllow", //
            "druid.wall.multiStatementAllow", //
    };
    //......
}
DruidDataSourceFactory的ALL_PROPERTIES常量定義了所有支持的可配置項(xiàng)

DruidDataSourceWrapper

com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceWrapper.java

@ConfigurationProperties("spring.datasource.druid")
public class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
    @Autowired
    private DataSourceProperties basicProperties;
    @Override
    public void afterPropertiesSet() throws Exception {
        //if not found prefix 'spring.datasource.druid' jdbc properties ,'spring.datasource' prefix jdbc properties will be used.
        if (super.getUsername() == null) {
            super.setUsername(basicProperties.determineUsername());
        }
        if (super.getPassword() == null) {
            super.setPassword(basicProperties.determinePassword());
        }
        if (super.getUrl() == null) {
            super.setUrl(basicProperties.determineUrl());
        }
        if (super.getDriverClassName() == null) {
            super.setDriverClassName(basicProperties.getDriverClassName());
        }
    }
    @Autowired(required = false)
    public void autoAddFilters(List<Filter> filters){
        super.filters.addAll(filters);
    }
    /**
     * Ignore the 'maxEvictableIdleTimeMillis &lt; minEvictableIdleTimeMillis' validate,
     * it will be validated again in {@link DruidDataSource#init()}.
     *
     * for fix issue #3084, #2763
     *
     * @since 1.1.14
     */
    @Override
    public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
        try {
            super.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
        } catch (IllegalArgumentException ignore) {
            super.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
        }
    }
}
DruidDataSourceWrapper繼承了DruidDataSource,在afterPropertiesSet的時(shí)候會(huì)使用DataSourceProperties的username、password、url、driverClassName,其他配置在DruidDataSource中

DruidDataSource

com/alibaba/druid/pool/DruidDataSource.java

public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource, MBeanRegistration {
    private boolean                          useGlobalDataSourceStat   = false;
    private boolean                          logDifferentThread        = true;
    private volatile boolean                 keepAlive                 = false;
    private boolean                          asyncInit                 = false;
    protected boolean                        killWhenSocketReadTimeout = false;
    protected boolean                        checkExecuteTime          = false;        
}
DruidDataSource繼承了DruidAbstractDataSource,它只定義了keepAlive、asyncInit等幾個(gè)配置,其它大部分配置在DruidAbstractDataSource中

DruidAbstractDataSource

com/alibaba/druid/pool/DruidAbstractDataSource.java

public abstract class DruidAbstractDataSource extends WrapperAdapter implements DruidAbstractDataSourceMBean, DataSource, DataSourceProxy, Serializable {
    protected volatile int initialSize = DEFAULT_INITIAL_SIZE;
    public static final int DEFAULT_INITIAL_SIZE = 0;
    protected volatile int maxActive = DEFAULT_MAX_ACTIVE_SIZE;
    public static final int DEFAULT_MAX_ACTIVE_SIZE = 8;
    protected volatile int minIdle = DEFAULT_MIN_IDLE;
    public static final int DEFAULT_MIN_IDLE = 0;
    protected volatile int maxIdle = DEFAULT_MAX_IDLE;
    public static final int DEFAULT_MAX_IDLE = 8;
    protected volatile long maxWait = DEFAULT_MAX_WAIT;
    public static final int DEFAULT_MAX_WAIT = -1;
    protected volatile String validationQuery = DEFAULT_VALIDATION_QUERY;
    public static final String DEFAULT_VALIDATION_QUERY = null;   
    protected volatile int validationQueryTimeout = -1;
    protected volatile boolean testOnBorrow = DEFAULT_TEST_ON_BORROW;
    public static final boolean DEFAULT_TEST_ON_BORROW = false;
    protected volatile boolean testOnReturn = DEFAULT_TEST_ON_RETURN;
    public static final boolean DEFAULT_TEST_ON_RETURN = false;
    protected volatile boolean testWhileIdle = DEFAULT_WHILE_IDLE;
    public static final boolean DEFAULT_WHILE_IDLE = true;
    protected volatile int maxPoolPreparedStatementPerConnectionSize = 10;
    protected volatile long timeBetweenEvictionRunsMillis = DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
    public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = 60 * 1000L;
    protected volatile int numTestsPerEvictionRun = DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
    public static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 3;
    protected volatile long minEvictableIdleTimeMillis = DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
    public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1000L * 60L * 30L;
    protected volatile long maxEvictableIdleTimeMillis = DEFAULT_MAX_EVICTABLE_IDLE_TIME_MILLIS;
    public static final long DEFAULT_MAX_EVICTABLE_IDLE_TIME_MILLIS = 1000L * 60L * 60L * 7;
    protected volatile long keepAliveBetweenTimeMillis = DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS * 2;
    protected volatile long phyTimeoutMillis = DEFAULT_PHY_TIMEOUT_MILLIS;
    public static final long DEFAULT_PHY_TIMEOUT_MILLIS = -1;
    protected volatile long timeBetweenConnectErrorMillis = DEFAULT_TIME_BETWEEN_CONNECT_ERROR_MILLIS;
    public static final long DEFAULT_TIME_BETWEEN_CONNECT_ERROR_MILLIS = 500;
}
DruidAbstractDataSource定義的配置及其默認(rèn)值如下
類別配置項(xiàng)默認(rèn)值說(shuō)明
數(shù)量initialSize0-
數(shù)量maxActive8-
數(shù)量minIdle0-
數(shù)量maxIdle8-
數(shù)量maxPoolPreparedStatementPerConnectionSize10-
健康檢測(cè)validationQuerynullmysql默認(rèn)為SELECT 1
健康檢測(cè)validationQueryTimeout-1單位秒,mysql默認(rèn)1s
健康檢測(cè)testOnBorrowfalse-
健康檢測(cè)testOnReturnfalse-
健康檢測(cè)testOnReturnfalse-
健康檢測(cè)testWhileIdletrue-
evicttimeBetweenEvictionRunsMillis60s-
evictnumTestsPerEvictionRun3-
evictminEvictableIdleTimeMillis30分鐘-
evictmaxEvictableIdleTimeMillis7小時(shí)-
超時(shí)maxWait-1單位毫秒
超時(shí)keepAliveBetweenTimeMillis120s2* DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
超時(shí)phyTimeoutMillis-1-
超時(shí)queryTimeout0-
超時(shí)transactionQueryTimeout0-
錯(cuò)誤timeBetweenConnectErrorMillis500ms-
連接泄露removeAbandonedfalse-
連接泄露removeAbandonedTimeoutMillis300s-
獲取連接時(shí),若maxWait大于0則走的pollLast(nanos),其中maxWait是作為notEmpty.awaitNanos參數(shù),毫秒轉(zhuǎn)為nacos,若為負(fù)數(shù)則取0;若maxWait小于等于0則走的takeLast,執(zhí)行的是notEmpty.await(),即阻塞等待

小結(jié)

druid連接池的配置主要是在DruidDataSource中,而DruidDataSource繼承了DruidAbstractDataSource,它只定義了keepAlive、asyncInit等幾個(gè)配置,其它大部分配置在DruidAbstractDataSource中,沒有單獨(dú)的一個(gè)配置類,然后默認(rèn)只開啟了testWhileIdle,maxWait默認(rèn)為-1;因而建議強(qiáng)制配置maxWait為正數(shù)(單位毫秒);在并發(fā)量比較大的場(chǎng)景,若要保證連接池的穩(wěn)定數(shù)量則可以將minIdle配置為與maxIdle一樣。

以上就是druid連接池的參數(shù)配置示例全面解析的詳細(xì)內(nèi)容,更多關(guān)于druid連接池參數(shù)配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring中利用IOC實(shí)現(xiàn)注入的方式

    Spring中利用IOC實(shí)現(xiàn)注入的方式

    Spring IOC(控制反轉(zhuǎn))實(shí)現(xiàn)依賴注入,將對(duì)象創(chuàng)建和依賴關(guān)系的管理交由Spring容器處理,通過(guò)注解或XML配置,實(shí)現(xiàn)對(duì)象之間的松耦合,提高代碼復(fù)用性和可維護(hù)性
    2023-04-04
  • SpringCloud?Feign集成AOP的常見問(wèn)題與解決

    SpringCloud?Feign集成AOP的常見問(wèn)題與解決

    在使用?Spring?Cloud?Feign?作為微服務(wù)通信的工具時(shí),我們可能會(huì)遇到?AOP?不生效的問(wèn)題,這篇文章將深入探討這一問(wèn)題,給出幾種常見的場(chǎng)景,分析可能的原因,并提供解決方案,希望對(duì)大家有所幫助
    2023-10-10
  • Java內(nèi)存溢出場(chǎng)景及解決方案

    Java內(nèi)存溢出場(chǎng)景及解決方案

    內(nèi)存溢出是Java應(yīng)用開發(fā)中常見的問(wèn)題,但通過(guò)合理的代碼優(yōu)化、內(nèi)存管理以及JVM參數(shù)調(diào)整,我們可以有效地避免和解決這類問(wèn)題,這篇文章主要介紹了Java內(nèi)存溢出場(chǎng)景及解決辦法,需要的朋友可以參考下
    2024-04-04
  • Java線程同步及實(shí)現(xiàn)方法詳解

    Java線程同步及實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java線程同步及實(shí)現(xiàn)方法詳解,當(dāng)我們有多個(gè)線程要同時(shí)訪問(wèn)一個(gè)變量或?qū)ο髸r(shí),如果這些線程中既有讀又有寫操作時(shí),就會(huì)導(dǎo)致變量值或?qū)ο蟮臓顟B(tài)出現(xiàn)混亂,從而導(dǎo)致程序異常,需要的朋友可以參考下
    2023-11-11
  • java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn)

    java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java代碼規(guī)范與質(zhì)量檢測(cè)插件SonarLint的使用

    Java代碼規(guī)范與質(zhì)量檢測(cè)插件SonarLint的使用

    本文主要介紹了Java代碼規(guī)范與質(zhì)量檢測(cè)插件SonarLint的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java interrupt()方法使用注意_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java interrupt()方法使用注意_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java interrupt()方法使用注意_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-05-05
  • 淺談java多線程編程

    淺談java多線程編程

    這篇文章主要介紹了java多線程編程的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)java多線程,感興趣的朋友可以了解下
    2020-08-08
  • Java責(zé)任鏈模式定義與用法分析

    Java責(zé)任鏈模式定義與用法分析

    這篇文章主要介紹了Java責(zé)任鏈模式定義與用法,結(jié)合具體實(shí)例分析了java責(zé)任鏈模式的功能、定義、使用方法、適用情況等,需要的朋友可以參考下
    2017-06-06
  • SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟

    SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟

    聽說(shuō)過(guò)jasypt嗎?它可是一個(gè)超級(jí)流行的Java庫(kù)哦,提供了簡(jiǎn)單又高效的加密和解密接口,整合jasypt后,我們的SpringBoot應(yīng)用就能輕松處理敏感數(shù)據(jù)的加密和解密,而不必為復(fù)雜的加密算法頭疼啦,下面給大家介紹SpringBoot整合jasypt實(shí)現(xiàn)數(shù)據(jù)加密的步驟,感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論

肥东县| 湄潭县| 望谟县| 武宣县| 萨嘎县| 通州市| 岑巩县| 黔南| 银川市| 淮南市| 白山市| 江门市| 通河县| 土默特左旗| 成武县| 东城区| 尼木县| 陇南市| 茌平县| 密云县| 英山县| 神池县| 仪陇县| 怀来县| 边坝县| 卢湾区| 斗六市| 凤冈县| 大田县| 怀宁县| 喜德县| 华池县| 吴川市| 孟津县| 苏尼特右旗| 临猗县| 磐石市| 额敏县| 盐源县| 乌海市| 福贡县|