springboot druid oracle記錄

springboot版本 2.2.2.RELEASE

druid版本  1.1.21

oracle版本 12g

遇到問題和解決方法記錄如下,獨樂樂不如衆樂樂,希望遇到同樣問題的人看到後會有所幫助

1.連接oracle工具navicat,下載版本和oci版本要一致,都是64位或都是32位

      我是64位navicat,所以下載了oci爲64位的:https://download.oracle.com/otn_software/nt/instantclient/19500/instantclient-basic-windows.x64-19.5.0.0.0dbru.zip

      下載解壓後,在navicat 工具-->選項-->oci 配置剛纔解壓的文件夾裏的oci,配置後必須重啓navicat;

      創建oralce鏈接如圖:

       記得設置保活心跳間隔,不然過一會就自己斷了就必須重啓才能連上,設置如下圖後就不會斷了

      連上後就可以happy的使用了

2.druid連接池,程序過一會兒就報com.alibaba.druid.util.JdbcUtils - close statement error錯誤,然後重連訪問需要停頓一段時間,體驗很不好

  解決方案: 

# 初始化大小,最小,最大
initialSize: 10
minIdle: 10
maxActive: 200
keepAlive: true
# 配置獲取連接等待超時的時間
maxWait: 60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1 FROM DUAL
validationQueryTimeout: 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打開PSCache,並且指定每個連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 100
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
filters: stat,wall,log4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合併多個DruidDataSource的監控數據
useGlobalDataSourceStat: true
removeAbandoned: true
removeAbandonedTimeout: 1800

注意上配置中紅色配置很重要,然後在程序中相應設置一下,如下圖

最後登錄druid管理界面確認一下是否配置成功,如下圖,其他屬性都可以看下是否成功

   這樣終於解決了druid連oracle過一會就close error和停頓的問題了。

  具體原因是通過趴底層代碼keepAlive默認false,debug走到心跳檢測是否有效時,如果沒有keepAlive就不會按空閒檢測時間執行,導致oracle服務端可能由於防火牆等因素斷了鏈接,而客戶端不知道就報關閉鏈接錯誤了。

3.創建和關閉sqlSession都沒有進行事務註冊,老是提示create/close a non transanctional session

  解決方案是給每個service的實現類impl註解上@Transactional(rollbackFor = Exception.class)

  例如截圖:

以上問題在此記錄一下,希望見着能解心中疑惑,如果你有其他高見或者疑問,留言本帖吧!

 

 

    

   

發佈了18 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章