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事件
- Spring 事務原始碼解析Spring原始碼
- 解析Spring Boot中的事務管理機制Spring Boot
- Spring學習筆記3(JDBC模板&事務管理)Spring筆記JDBC
- Spring事務原理完全解析Spring
- 10.JDBC事務JDBC
- 【JAVA高階】——吃透JDBC中的事務及事務的封裝JavaJDBC封裝
- @Transactional註解管理事務和手動提交事務
- Spring 中的事務管理Spring
- 一文帶你深度解析MySQL 8.0事務提交原理MySql
- Spring事務專題(四)Spring中事務的使用、抽象機制及模擬Spring事務實現Spring抽象
- 事務單獨提交和
- MySQL事務兩段式提交MySql
- Spring中@Transactional事務使用陷阱Spring
- Spring Data JPA中事務ReactiveTransactionManagerSpringReact
- (四)Spring中的事務管理Spring
- Spring中如何配置Hibernate事務Spring
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- Spring 事務Spring
- spring事務Spring
- vitess兩階段提交事務Vite
- 從JDBC到ORM的事務實現JDBCORM
- MySQl事務建立,開始以及提交MySql
- Spring 事務管理Spring
- Spring Boo中事務感知快取示例Spring快取
- Spring中事務管理org.springframework.transactionSpringFramework
- Spring Data JPA中事務超時TransactionTimedOutExceptionSpringException
- Spring框架中配置事務管理器Spring框架
- 【Spring】jdbcSpringJDBC
- spring — Spring中的事件驅動機制解析Spring事件
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- spring原始碼解析 (七) 事務底層原始碼實現Spring原始碼
- Spring Data JPA中事務監聽器TransactionExecutionListenerSpring
- Spring Data JPA中事務使用異常TransactionUsageExceptionSpringException
- Spring Data JPA中事務回滾意外RollbackExceptionSpringException
- spring-5-事務Spring
- Spring Webflux與事務SpringWebUX
- Spring系列.事務管理Spring