阿里巴巴連接池(Druid)


一、com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的區別

com.mysql.jdbc.Driver 是 mysql-connector-java 5中的, 
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6以及以上中的

com.mysql.cj.jdbc.Driver 需要指定時區serverTimezone,serverTimezone=UTC代表全球標准時間,使用中國標准時間可設置serverTimezone=Asia/Shanghai。

   @Test
    public void testInsert() throws  Exception{
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(("----- insert method test ------"));
        User user = new User();
        user.setName("留言");
        user.setAge(30);
        user.setEmail("1515@163.com");
        System.out.println(simpleDateFormat.format(new Date()));
        user.setTime(simpleDateFormat.parse(simpleDateFormat.format(new Date())));
        int cout = userMapper.insert(user);
        System.out.println(cout);
    }

二、配置連接池參

配置 缺省值 說明
name   配置這個屬性的意義在於,如果存在多個數據源,監控的時候
可以通過名字來區分開來。如果沒有配置,將會生成一個名字,
格式是:"DataSource-" + System.identityHashCode(this)
jdbcUrl   連接數據庫的url,不同數據庫不一樣。例如:
mysql : jdbc:mysql://10.20.153.104:3306/druid2 
oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username   連接數據庫的用戶名
password  

連接數據庫的密碼。密碼加密

https://www.cnblogs.com/BoKe-LY/p/11919017.html

可以使用ConfigFilter。詳細看這里:
https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

driverClassName 根據url自動識別 這一項可配可不配,如果不配置druid會根據url自動識別dbType,
然后選擇相應的driverClassName
initialSize 0 初始化時建立物理連接的個數。初始化發生在顯示調用init方法,
或者第一次getConnection時
maxActive 8 最大連接池數量
maxIdle 8 已經不再使用,配置了也沒效果
minIdle   最小連接池數量
maxWait   獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,
缺省啟用公平鎖,並發效率會有所下降,
如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatements false 是否緩存preparedStatement,也就是PSCache。
PSCache對支持游標的數據庫性能提升巨大,比如說oracle。
在mysql5.5以下的版本中沒有PSCache功能,建議關閉掉。
5.5及以上版本有PSCache,建議開啟。
maxOpenPreparedStatements -1 要啟用PSCache,必須配置大於0,當大於0時,
poolPreparedStatements自動觸發修改為true。
在Druid中,不會存在Oracle下PSCache占用內存過多的問題,
可以把這個數值配置大一些,比如說100
validationQuery   用來檢測連接是否有效的sql,要求是一個查詢語句。
如果validationQuery為null,testOnBorrow、testOnReturn、
testWhileIdle都不會其作用。
testOnBorrow true 申請連接時執行validationQuery檢測連接是否有效,
做了這個配置會降低性能。
testOnReturn false 歸還連接時執行validationQuery檢測連接是否有效,
做了這個配置會降低性能
testWhileIdle false 建議配置為true,不影響性能,並且保證安全性。
申請連接的時候檢測,如果空閑時間大於
timeBetweenEvictionRunsMillis,
執行validationQuery檢測連接是否有效。
timeBetweenEvictionRunsMillis   有兩個含義:
1) Destroy線程會檢測連接的間隔時間
 2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明
numTestsPerEvictionRun   不再使用,一個DruidDataSource只支持一個EvictionRun
minEvictableIdleTimeMillis   Destory線程中如果檢測到當前連接的最后活躍時間和當前時間的差值大於
minEvictableIdleTimeMillis,則關閉當前連接。
connectionInitSqls   物理連接初始化的時候執行的sql
exceptionSorter 根據dbType自動識別 當數據庫拋出一些不可恢復的異常時,拋棄連接
filters   屬性類型是字符串,通過別名的方式配置擴展插件,
常用的插件有:
監控統計用的filter:stat 
日志用的filter:log4j
 防御sql注入的filter:wall
proxyFilters   類型是List<com.alibaba.druid.filter.Filter>,
如果同時配置了filters和proxyFilters,
是組合關系,並非替換關系
removeAbandoned   對於建立時間超過removeAbandonedTimeout的連接強制關閉
removeAbandonedTimeout   指定連接建立多長時間就需要被強制關閉
logAbandoned   指定發生removeabandoned的時候,是否記錄當前線程的堆棧信息到日志中

示例

#mysql驅動
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#連接數據庫url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8
#用戶名
spring.datasource.username=root
# 啟用ConfigFilter
spring.datasource.druid.filter.config.enabled=true
# 配置 connection-properties,啟用加密,配置公鑰。
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKvEAHucOqBPMS/2hyS5vvBEI7i/KJNQAncAysoAzjD9zLT05EUYTcSM/ry6JqeVBwI2BwLge/xPRoXO7TNfyB0CAwEAAQ==
#加密並注入publicKey
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
#密碼
spring.datasource.password=krh9x0zn/ESXIgZPrMxBpyMef1bZ1t/vbwE9EcqdY0qTSi4iK3vnJfbyiWu7mT2A/uhx1MDnKzE3C1YT0Ry2lg==
#連接池druid阿里巴巴
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#連接池配置
#初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時
spring.datasource.druid.initial-size=5
#最小連接池數量
spring.datasource.druid.min-idle=5
#最大連接池數量
spring.datasource.druid.max-active=20
#連接等待超時時間
# 獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,
# 並發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
spring.datasource.druid.max-wait=60000
#配置隔多久進行一次檢測(檢測可以關閉的空閑連接)
#有兩個含義:
#1: Destroy線程會檢測連接的間隔時間
#2: testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置連接在池中的最小生存時間
spring.datasource.druid.min-evictable-idle-time-millis=300000
#用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。
spring.datasource.druid.validation-query= SELECT 'x'
#設置從連接池獲取連接時是否檢查連接有效性,true時,如果連接空閑時間超過minEvictableIdleTimeMillis進行檢查,否則不檢查;false時,不檢查
spring.datasource.druid.test-while-idle=true
#申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
spring.datasource.druid.test-on-borrow=false
#歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
spring.datasource.druid.test-on-return=true
# 打開PSCache,並且指定每個連接上PSCache的大小.是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql下建議關閉。
spring.datasource.druid.pool-prepared-statements=false
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:
#監控統計用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆
#spring.datasource.druid.filters=stat,wall,log4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.druid.connect-properties.=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000


免責聲明!

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



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