一、druid和druid-spring-boot-starter區別分析
- 作用是一樣的,都是連接池提供連接,里邊的配置參數都是一樣的;
- druid-spring-boot-starter只是在druid基礎上進行了一次封裝,專門用來整合spring-boot項目;
如果springboot項目想使用druid也是可以的,但是需要手動編寫配置類並注入到bean中,並加載對應的配置參數;但是不建議,明明有現成封裝好的jar,就直接使用就好了!!!

二、springboot項目中提示報錯Cannot resolve configuration property 'spring.datasource.xxxx'
1、問題發現:
定位接口無響應問題時,發現是由於數據庫掛了導致的;但是不應該呀,數據庫連接池設置了最大等待超時時間還是有返回的,然后深入解讀代碼,發現是配置參數有問題

2、分析
問題1:為什么datasource下邊就沒有這些參數,這樣子配置居然沒有報錯,只是提示? ---> 原來spring-boot是可以配置不存在的key值,只要保證格式正確,在加載的時候不會解析錯誤的key
問題2:那應該怎么配置? ---> 查看源碼分析
(1)第一步:先找到druid配置類 ---> spring-boot-starter的自動配置類基本都是xxxxxAutoConfigure 或xxxxxAutoConfiguration
發現druid配置類中注入了一個DruidDataSourceWrapper實例,且用@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})開啟@ConfigurationProperties注解配置

(2)第二步:找到對應的bean實例DruidDataSourceWrapper,發現使用注解@ConfigurationProperties配置了前綴:spring.datasource.druid,把該前綴開頭的主配置文件中配置屬性設置到對於的Bean屬性上

(3)第三步:Bean本身沒有屬性,都是繼承抽象類父類的屬性,基本都設置了默認值。

spring:
#數據源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.100.99:3306/energy_storage_test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5 # 初始化大小
min-idle: 5 # 最小空閑連接個數
max-active: 20 # 最大連接個數
max-wait: 60000 # 配置獲取連接等待超時的時間
time-between-eviction-runs-millis: 60000 # 配置間隔多久才進行一次監測,監測需要關閉的空閑連接,單位時毫秒
min-evictable-idle-time-millis: 60000 # 配置一個連接在池中最小生存的時間
validation-query: select 'x' # 用來監測連接是否有效的sql,要求是一個查詢語句
test-while-idle: true # 建議配置為true,不影響性能,並且保證安全性。如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
test-on-borrow: false # 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
test-on-return: false # 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
pool-prepared-statements: true # 打開PSCache,並且指定每個連接上PSCache的大小
max-open-prepared-statements: 20
filter:
commons-log:
connection-logger-name: stat,wall,log4j # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆,此處是filter修改的地方
3、總結
①springboot項目整合druid,建議使用druid-spring-boot-strater,但是不代表druid一定不可以使用,有興趣的可以自己試試
②配置yaml文件時,一定要使用druid下邊的參數,要不然不起作用
三、Hikari連接池(下篇博文中會介紹druid切換成hikari時遇到的問題)
springboot2.0默認集成了hikari連接池,號稱史上性能最好,速度最快的連接池,自動裝配原理都一樣,大家可以試試,下面附上常用的一些參數配置
spring:
datasource:
username: dangbo
password: dangbo
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306?auth_shiro
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5 # 最小空閑數,默認值為10
maximum-pool-size: 15 # 最大連接數,默認值為10
auto-commit: true # 控制從池返回的連接的默認自動提交行為
idle-timeout: 30000 # 控制允許連接在池中閑置的最長時間,默認值10min
pool-name: DatebookHikariCP # 連接池的用戶定義名稱,主要出現在日志記錄和JMX管理控制台中以識別池和池配置。 默認:自動生成
max-lifetime: 1800000 # 池中連接的最大生存期,默認值30min
connection-timeout: 30000 # 控制客戶端將等待來自池的連接的最大毫秒數,默認值為30s
connection-test-query: SELECT 'x'
hikari配置參考於:https://blog.csdn.net/Maskkiss/article/details/82115149