關於springboot專案連線資料庫No operations allowed after connection closed的解決
今天因為專案的需要在系統中配置了雙資料來源。但是在專案執行過程中,系統日誌出現了No operations allowed after connection closed的錯誤。
注:專案使用mybatis,資料庫使用mysql
錯誤原因是在更改了雙資料來源後,重寫了datasource的config檔案,application.yml只是簡單配置了資料庫地址和使用者密碼以及driver-class-name。
由於之前單資料來源時並沒有這個錯誤,所以可能是springboot預設的配置被重寫的config檔案所覆蓋了,導致對資料庫連結的操作無法執行。
在配置檔案中新增如下即可。
max-idle: 10 #指定連線池最大的空閒連線數量. max-wait: 10000 #指定連線池等待連線返回的最大等待時間,毫秒單位. min-idle: 5 #指定必須保持連線的最小值(For DBCP and Tomcat connection pools) initial-size: 5 #指定啟動連線池時,初始建立的連線數量 validation-query: SELECT 1 #指定獲取連線時連線校驗的sql查詢語句. test-on-borrow: false #獲取連線時候驗證,會影響效能 test-while-idle: true #當連線空閒時,是否執行連線測試. time-between-eviction-runs-millis: 18800 #指定空閒連線檢查、廢棄連線清理、空閒連線池大小調整之間的操作時間間隔
具體細節參考文章
感謝博主分享。
摘錄一些文章中的內容
SpringBoot配置屬性之DataSource
datasource
spring.dao.exceptiontranslation.enabled是否開啟PersistenceExceptionTranslationPostProcessor,預設為true
spring.datasource.abandon-when-percentage-full設定超時被廢棄的連線佔到多少比例時要被關閉或上報
spring.datasource.allow-pool-suspension使用Hikari pool時,是否允許連線池暫停,預設為: false
spring.datasource.alternate-username-allowed是否允許替代的使用者名稱.
spring.datasource.auto-commit指定updates是否自動提交.
spring.datasource.catalog指定預設的catalog.
spring.datasource.commit-on-return設定當連線被歸還時,是否要提交所有還未完成的事務
spring.datasource.connection-init-sql指定連線被建立,再被新增到連線池之前執行的sql.
spring.datasource.connection-init-sqls使用DBCP connection pool時,指定初始化時要執行的sql
spring.datasource.connection-properties.[key]在使用DBCP connection pool時指定要配置的屬性
spring.datasource.connection-test-query指定校驗連接合法性執行的sql語句
spring.datasource.connection-timeout指定連線的超時時間,毫秒單位.
spring.datasource.continue-on-error在初始化資料庫時,遇到錯誤是否繼續,預設false
spring.datasource.data指定Data (DML)指令碼
spring.datasource.data-source-class-name指定資料來源的全限定名.
spring.datasource.data-source-jndi指定jndi的地址
spring.datasource.data-source-properties.[key]使用Hikari connection pool時,指定要設定的屬性
spring.datasource.db-properties使用Tomcat connection pool,指定要設定的屬性
spring.datasource.default-auto-commit是否自動提交.
spring.datasource.default-catalog指定連線預設的catalog.
spring.datasource.default-read-only是否設定預設連線只讀.
spring.datasource.default-transaction-isolation指定連線的事務的預設隔離級別.
spring.datasource.driver-class-name指定driver的類名,預設從jdbc url中自動探測.
spring.datasource.fair-queue是否採用FIFO返回連線.
spring.datasource.health-check-properties.[key]使用Hikari connection pool時,在心跳檢查時傳遞的屬性
spring.datasource.idle-timeout指定連線多久沒被使用時,被設定為空閒,預設為10ms
spring.datasource.ignore-exception-on-pre-load當初始化連線池時,是否忽略異常.
spring.datasource.init-sql當連線建立時,執行的sql
spring.datasource.initial-size指定啟動連線池時,初始建立的連線數量
spring.datasource.initialization-fail-fast當建立連線池時,沒法建立指定最小連線數量是否拋異常
spring.datasource.initialize指定初始化資料來源,是否用data.sql來初始化,預設: true
spring.datasource.isolate-internal-queries指定內部查詢是否要被隔離,預設為false
spring.datasource.jdbc-interceptors使用Tomcat connection pool時,指定jdbc攔截器,分號分隔
spring.datasource.jdbc-url指定JDBC URL.
spring.datasource.jmx-enabled是否開啟JMX,預設為: false
spring.datasource.jndi-name指定jndi的名稱.
spring.datasource.leak-detection-threshold使用Hikari connection pool時,多少毫秒檢測一次連線洩露.
spring.datasource.log-abandoned使用DBCP connection pool,是否追蹤廢棄statement或連線,預設為: false
spring.datasource.log-validation-errors當使用Tomcat connection pool是否列印校驗錯誤.
spring.datasource.login-timeout指定連線資料庫的超時時間.
spring.datasource.max-active指定連線池中最大的活躍連線數.
spring.datasource.max-age指定連線池中連線的最大年齡
spring.datasource.max-idle指定連線池最大的空閒連線數量.
spring.datasource.max-lifetime指定連線池中連線的最大生存時間,毫秒單位.
spring.datasource.max-open-prepared-statements指定最大的開啟的prepared statements數量.
spring.datasource.max-wait指定連線池等待連線返回的最大等待時間,毫秒單位.
spring.datasource.maximum-pool-size指定連線池最大的連線數,包括使用中的和空閒的連線.
spring.datasource.min-evictable-idle-time-millis指定一個空閒連線最少空閒多久後可被清除.
spring.datasource.min-idle指定必須保持連線的最小值(For DBCP and Tomcat connection pools)
spring.datasource.minimum-idle指定連線維護的最小空閒連線數,當使用HikariCP時指定.
spring.datasource.name指定資料來源名.
spring.datasource.num-tests-per-eviction-run指定執行每個idle object evictor執行緒時的物件數量
spring.datasource.password指定資料庫密碼.
spring.datasource.platform指定schema要使用的Platform(schema-${platform}.sql),預設為: all
spring.datasource.pool-name指定連線池名字.
spring.datasource.pool-prepared-statements指定是否池化statements.
spring.datasource.propagate-interrupt-state在等待連線時,如果執行緒被中斷,是否傳播中斷狀態.
spring.datasource.read-only當使用Hikari connection pool時,是否標記資料來源只讀
spring.datasource.register-mbeans指定Hikari connection pool是否註冊JMX MBeans.
spring.datasource.remove-abandoned指定當連線超過廢棄超時時間時,是否立刻刪除該連線.
spring.datasource.remove-abandoned-timeout指定連線應該被廢棄的時間.
spring.datasource.rollback-on-return在歸還連線時,是否回滾等待中的事務.
spring.datasource.schema指定Schema (DDL)指令碼.
spring.datasource.separator指定初始化指令碼的語句分隔符,預設: ;
spring.datasource.sql-script-encoding指定SQL scripts編碼.
spring.datasource.suspect-timeout指定列印廢棄連線前的超時時間.
spring.datasource.test-on-borrow當從連線池借用連線時,是否測試該連線.
spring.datasource.test-on-connect建立時,是否測試連線
spring.datasource.test-on-return在連線歸還到連線池時是否測試該連線.
spring.datasource.test-while-idle當連線空閒時,是否執行連線測試.
spring.datasource.time-between-eviction-runs-millis指定空閒連線檢查、廢棄連線清理、空閒連線池大小調整之間的操作時間間隔
spring.datasource.transaction-isolation指定事務隔離級別,使用Hikari connection pool時指定
spring.datasource.url指定JDBC URL.
spring.datasource.use-disposable-connection-facade是否對連線進行包裝,防止連線關閉之後被使用.
spring.datasource.use-equals比較方法名時是否使用String.equals()替換==.
spring.datasource.use-lock是否對連線操作加鎖
spring.datasource.username指定資料庫名.
spring.datasource.validation-interval指定多少ms執行一次連線校驗.
spring.datasource.validation-query指定獲取連線時連線校驗的sql查詢語句.
spring.datasource.validation-query-timeout指定連線校驗查詢的超時時間.
spring.datasource.validation-timeout設定連線校驗的超時時間,當使用Hikari connection pool時指定
spring.datasource.validator-class-name用來測試查詢的validator全限定名.
spring.datasource.xa.data-source-class-name指定資料來源的全限定名.
spring.datasource.xa.properties指定傳遞給XA data source的屬性
JPA
spring.jpa.database指定目標資料庫.
spring.jpa.database-platform指定目標資料庫的型別.
spring.jpa.generate-ddl是否在啟動時初始化schema,預設為false
spring.jpa.hibernate.ddl-auto指定DDL mode (none, validate, update, create, create-drop). 當使用內嵌資料庫時,預設是create-drop,否則為none.
spring.jpa.hibernate.naming-strategy指定命名策略.
spring.jpa.open-in-view是否註冊OpenEntityManagerInViewInterceptor,繫結JPA EntityManager到請求執行緒中,預設為: true
spring.jpa.properties新增額外的屬性到JPA provider.
spring.jpa.show-sql是否開啟sql的log,預設為: false
jooq
spring.jooq.sql-dialect指定JOOQ使用的SQLDialect,比如POSTGRES.
h2
spring.h2.console.enabled是否開啟控制檯,預設為false
spring.h2.console.path指定控制檯路徑,預設為: /h2-console
JTA
spring.jta.allow-multiple-lrc是否允許 multiple LRC,預設為: false
spring.jta.asynchronous2-pc指定兩階段提交是否可以非同步,預設為: false
spring.jta.background-recovery-interval指定多少分鐘跑一次recovery process,預設為: 1
spring.jta.background-recovery-interval-seconds指定多久跑一次recovery process,預設: 60
spring.jta.current-node-only-recovery是否過濾掉其他非本JVM的recovery,預設為: true
spring.jta.debug-zero-resource-transaction是否追蹤沒有使用指定資源的事務,預設為: false
spring.jta.default-transaction-timeout設定預設的事務超時時間,預設為60
spring.jta.disable-jmx是否禁用jmx,預設為false
spring.jta.enabled是否開啟JTA support,預設為: true
spring.jta.exception-analyzer設定指定的異常分析類
spring.jta.filter-log-status使用Bitronix Transaction Manager時,是否寫mandatory logs,開啟的話,可以節省磁碟空間,但是除錯會複雜寫,預設為false
spring.jta.force-batching-enabled使用Bitronix Transaction Manager時,是否批量寫磁碟,預設為true.
spring.jta.forced-write-enabled使用Bitronix Transaction Manager時,是否強制寫日誌到磁碟,預設為true
spring.jta.graceful-shutdown-interval當使用Bitronix Transaction Manager,指定shutdown時等待事務結束的時間,超過則中斷,預設為60
spring.jta.jndi-transaction-synchronization-registry-name當使用Bitronix Transaction Manager時,在JNDI下得事務同步registry,預設為: java:comp/TransactionSynchronizationRegistry
spring.jta.jndi-user-transaction-name指定在JNDI使用Bitronix Transaction Manager的名稱,預設:java:comp/UserTransaction
spring.jta.journal當使用Bitronix Transaction Manager,指定The journal是否disk還是null還是一個類的全限定名,預設disk
spring.jta.log-dirTransaction logs directory.
spring.jta.log-part1-filename指定The journal fragment檔案1的名字,預設: btm1.tlog
spring.jta.log-part2-filename指定The journal fragment檔案2的名字,預設: btm2.tlog
spring.jta.max-log-size-in-mb指定journal fragments大小的最大值. 預設: 2M
spring.jta.resource-configuration-filename指定Bitronix Transaction Manager配置檔名.
spring.jta.server-id指定Bitronix Transaction Manager例項的id.
spring.jta.skip-corrupted-logs是否忽略corrupted log files檔案,預設為false.
spring.jta.transaction-manager-id指定Transaction manager的唯一標識.
spring.jta.warn-about-zero-resource-transaction當使用Bitronix Transaction Manager時,是否對沒有使用指定資源的事務進行警告,預設為: true