springboot中JDBC連線超時問題

2021-09-10 05:51:58 字數 1550 閱讀 3945

最近專案中有乙個問題,電子保卡資訊要寫入資料庫,但寫入失敗,報錯

息是這樣的:

大體意思是上次成功接收報文的時間超過了資料庫超時時間的值,為了解決這個問題,應當增加資料庫的超時時間或者是啟用資料庫自動重連機制。所以我們可以用兩種方法: 

1、從db層解決問題:增大資料庫連線超時時間 

2、從應用層解決問題:設定自動重連機制,即在一定時間之內與資料庫重連一次

資料庫的超時時間是指乙個連線可空閒的最大時間,如超時時間是30分鐘,則如果乙個連線空閒了30分鐘,那麼該連線將斷開。

我這裡是mysql資料庫,首先使用下面命令查詢資料庫超時時間大小:

show  global  variables like  'wait_timeout';

顯示結果如下:

這個是mysql設定的預設值,這裡單位是秒,28800秒就是8小時。

想要重新設定超時時間可以用以下命令:

set global wait_timeout=28800;

但是資料庫的連線超時時間不能設定太長,時間過長,導致過多的connection sleep,占用較多系統資源。所以理論上雖然可以將超時時間設定的更大,但強列不推薦用這種方法。看一下第二種辦法。

#初始化連線

spring.datasource.initial-size=10

#最大空閒連線

spring.datasource.max-idle=20

#最小空閒連線

spring.datasource.min-idle=5

#最大連線數量

spring.datasource.max-active=50

#是否在自動**超時連線的時候列印連線的超時錯誤

spring.datasource.log-abandoned=true

#是否自動**超時連線

spring.datasource.remove-abandoned=true

#超時時間(以秒數為單位)

spring.datasource.remove-abandoned-timeout=180

##spring.datasource.max-wait=1000

spring.datasource.test-while-idle=true

#檢測資料庫的查詢語句

spring.datasource.validation-query=select 1 from dual

spring.datasource.test-on-borrow=true

#每隔五分鐘檢測空閒超過10分鐘的連線

spring.datasource.min-evictable-idle-time-millis=600000

spring.datasource.time-between-eviction-runs-millis=300000

Springboot配置jdbc資料來源

通過 properitessource註解讀取配置資訊 1,加入依賴 2,通過自定義配置檔案配置資料來源資訊 3,建立配置類 package com.bdqn.springbootjdbc.config import com.alibaba.druid.pool.druiddatasource im...

jdbc中的事務

所謂事務,就是針對資料庫的一組操作 多條sql 位於同乙個事務的操作具備同步的特點,也就是要麼都成功,要麼都失敗 在實際中,我們的很多操作都是需要由多條sql來共同完成的,例如,a賬戶給b賬戶轉賬就會對應兩條sql update account set money money 100 where n...

JDBC中的事務

步驟 開啟新事務 編寫組成事務的一組sql語句 結束事務 細節 要求開啟事務的連線物件和獲取命令的連線物件必須是同乙個,否則事務無效 有點執行緒同步的感覺 例項 兩個轉賬之間的轉賬 jdbcutils為封裝連線及釋放操作的工具類 public class testtransaction 使用事務 t...