druid和druid-spring-boot-starter區別,以及springboot項目中提示報錯Cannot resolve configuration property 'spring.datasource.xxxx' 和hikari配置屬性


一、druid和druid-spring-boot-starter區別分析

  1. 作用是一樣的,都是連接池提供連接,里邊的配置參數都是一樣的;
  2. 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


免責聲明!

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



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