如何在SpringBoot中配置Druid配置?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),成都小程序開發(fā),軟件按需網(wǎng)站制作等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
Druid是阿里開源的一個(gè)JDBC應(yīng)用組件, 其包括三部分:
DruidDriver: 代理Driver,能夠提供基于Filter-Chain模式的插件體系。
DruidDataSource: 高效可管理的數(shù)據(jù)庫連接池。
SQLParser: 實(shí)用的SQL語法分析
通過Druid連接池中間件, 我們可以實(shí)現(xiàn):
可以監(jiān)控?cái)?shù)據(jù)庫訪問性能,Druid內(nèi)置提供了一個(gè)功能強(qiáng)大的StatFilter插件,能夠詳細(xì)統(tǒng)計(jì)SQL的執(zhí)行性能,這對(duì)于線上分析數(shù)據(jù)庫訪問性能有幫助。
替換傳統(tǒng)的DBCP和C3P0連接池中間件。Druid提供了一個(gè)高效、功能強(qiáng)大、可擴(kuò)展性好的數(shù)據(jù)庫連接池。
數(shù)據(jù)庫密碼加密。直接把數(shù)據(jù)庫密碼寫在配置文件中,容易導(dǎo)致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
SQL執(zhí)行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應(yīng)的LogFilter,監(jiān)控你應(yīng)用的數(shù)據(jù)庫訪問情況。
擴(kuò)展JDBC,如果你要對(duì)JDBC層有編程的需求,可以通過Druid提供的Filter-Chain機(jī)制,很方便編寫JDBC層的擴(kuò)展插件。
配置代碼如下
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.MySQL.cj.jdbc.Driver url: jdbc:mysql://${url}:${port}/${數(shù)據(jù)庫名}?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true&useAffectedRows=true username: ${username} password: ${password} druid: initial-size: 10 # 初始化時(shí)建立物理連接的個(gè)數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時(shí) min-idle: 10 # 最小連接池?cái)?shù)量 maxActive: 200 # 最大連接池?cái)?shù)量 maxWait: 60000 # 獲取連接時(shí)最大等待時(shí)間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會(huì)有所下降,如果需要可以通過配置 timeBetweenEvictionRunsMillis: 60000 # 關(guān)閉空閑連接的檢測(cè)時(shí)間間隔.Destroy線程會(huì)檢測(cè)連接的間隔時(shí)間,如果連接空閑時(shí)間大于等于minEvictableIdleTimeMillis則關(guān)閉物理連接。 minEvictableIdleTimeMillis: 300000 # 連接的最小生存時(shí)間.連接保持空閑而不被驅(qū)逐的最小時(shí)間 validationQuery: SELECT 1 FROM DUAL # 驗(yàn)證數(shù)據(jù)庫服務(wù)可用性的sql.用來檢測(cè)連接是否有效的sql 因數(shù)據(jù)庫方言而差, 例如 oracle 應(yīng)該寫成 SELECT 1 FROM DUAL testWhileIdle: true # 申請(qǐng)連接時(shí)檢測(cè)空閑時(shí)間,根據(jù)空閑時(shí)間再檢測(cè)連接是否有效.建議配置為true,不影響性能,并且保證安全性。申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRun testOnBorrow: false # 申請(qǐng)連接時(shí)直接檢測(cè)連接是否有效.申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。 testOnReturn: false # 歸還連接時(shí)檢測(cè)連接是否有效.歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。 poolPreparedStatements: true # 開啟PSCache maxPoolPreparedStatementPerConnectionSize: 20 #設(shè)置PSCache值 connectionErrorRetryAttempts: 3 # 連接出錯(cuò)后再嘗試連接三次 breakAfterAcquireFailure: true # 數(shù)據(jù)庫服務(wù)宕機(jī)自動(dòng)重連機(jī)制 timeBetweenConnectErrorMillis: 300000 # 連接出錯(cuò)后重試時(shí)間間隔 asyncInit: true # 異步初始化策略 remove-abandoned: true # 是否自動(dòng)回收超時(shí)連接 remove-abandoned-timeout: 1800 # 超時(shí)時(shí)間(以秒數(shù)為單位) transaction-query-timeout: 6000 # 事務(wù)超時(shí)時(shí)間 filters: stat,wall,log4j2 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 web-stat-filter: enabled: true url-pattern: "/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" stat-view-servlet: url-pattern: "/druid/*" allow: deny: reset-enable: false login-username: admin login-password: admin
druid監(jiān)控?cái)?shù)據(jù)的外部化調(diào)用
@RestController public class DruidStatController { @GetMapping("/stat") public Object druidStat() { // DruidStatManagerFacade#getDataSourceStatDataList 該方法可以獲取所有數(shù)據(jù)源的監(jiān)控?cái)?shù)據(jù) return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); } }
圖例
springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡化配置文件。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。