Spring Series---事務中JDBC是否自動提交解析
自動提交
預設情況下,資料庫處於自動提交模式。每一條語句處於一個單獨的事務中,在這條語句執行完畢時,如果執行成功則隱式的提交事務,如果
執行失敗則隱式的回滾事務。
對於正常的事務管理,是一組相關的操作處於一個事務之中,因此必須關閉資料庫的自動提交模式。不過,這個我們不用擔心,spring會將底層連線的自動提交特性設定為false。
org/springframework/jdbc/datasource/DataSourceTransactionManager.java
// switch to manual commit if necessary. this is very expensive in some jdbc drivers,
// so we don't want to do it unnecessarily (for example if we've explicitly
// configured the connection pool to set it already).
if (con.getautocommit()) {
txobject.setmustrestoreautocommit(true);
if (logger.isdebugenabled()) {
logger.debug("switching jdbc connection [" + con + "] to manual commit");
}
con.setautocommit(false);
}
有些資料連線池提供了關閉事務自動提交的設定,最好在設定連線池時就將其關閉。但C3P0沒有提供這一特性,只能依靠spring來設定。
因為JDBC規範規定,當連線物件建立時應該處於自動提交模式,這是跨DBMS的預設值,如果需要,必須顯式的關閉自動提交。C3P0遵守這一規範,讓客戶程式碼來顯式的設定需要的提交模式。
連線關閉時的是否自動提交
當一個連線關閉時,如果有未提交的事務應該如何處理?JDBC規範沒有提及,C3P0預設的策略是回滾任何未提交的事務。這是一個正確的策略,但JDBC驅動提供商之間對此問題並沒有達成一致。
C3P0的autoCommitOnClose屬性預設是false,沒有十分必要不要動它。或者可以顯式的設定此屬性為false,這樣會更明確。
相關文章
- Spring中的事務提交事件Spring事件
- jdbc控制自動提交功能JDBC
- 探究MySQL的DML提交事務的意義和DQL是否有必要提交事務MySql
- JDBC中事務的問題JDBC
- 編輯 Java 中的事務 — JDBC 事務和 JTA 事務JavaJDBC
- 【web】Spring中使用DataSourceTransactionManager手動提交或回滾事務WebSpring
- 解析Spring Boot中的事務管理機制Spring Boot
- Spring 事務原始碼解析Spring原始碼
- Spring事務管理全解析Spring
- JDBC中事務的問題之二JDBC
- Spring事務原理完全解析Spring
- Spring分散式事務XA事務(兩段提交2PC)實現Spring分散式
- Entity Framework中 批量提交 事務處理Framework
- Spring學習筆記3(JDBC模板&事務管理)Spring筆記JDBC
- 10.JDBC事務JDBC
- 【JAVA高階】——吃透JDBC中的事務及事務的封裝JavaJDBC封裝
- @Transactional註解管理事務和手動提交事務
- Spring事務管理—aop:pointcut expression解析SpringExpress
- Spring中的事務控制Spring
- Spring 中的事務管理Spring
- 一文帶你深度解析MySQL 8.0事務提交原理MySql
- MySQL事務兩段式提交MySql
- MySQL 事務提交過程MySql
- java 事務提交/回滾Java
- 開始懷疑Spring框架的jdbc事務處理方式Spring框架JDBC
- SQL Server 查出未提交事務(長事務)SQLSQLServer
- Spring事務專題(四)Spring中事務的使用、抽象機制及模擬Spring事務實現Spring抽象
- 事務已提交另外會話查詢不到的問題解析會話
- JDBC事務處理設計JDBC
- (四)Spring中的事務管理Spring
- Spring中@Transactional事務使用陷阱Spring
- JDBC【事務、後設資料、改造JDBC工具類】JDBC
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- vitess兩階段提交事務Vite
- MySQL事務提交流程概述MySql
- Spring中如何配置Hibernate事務Spring
- spring中異常的使用--事務Spring
- Spring Data JPA中事務ReactiveTransactionManagerSpringReact