編程式事務spring
聲明式事務數據庫
transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { try{ } catch (Exception e) { } finally { status.setRollbackOnly(); ) );
xml配置編程
<!-- 事務管理配置 --> <bean id="springTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven proxy-target-class="true" transaction-manager="springTransactionManager"/>
添加【@Transaction】註解到相關方法服務器
屬性名 | 說明 |
---|---|
name | 當在配置文件中有多個 TransactionManager , 能夠用該屬性指定選擇哪一個事務管理器。 |
propagation | 事務的傳播行爲,默認值爲 REQUIRED。 |
isolation | 事務的隔離度,默認值採用 DEFAULT。 |
timeout | 事務的超時時間,默認值爲-1。若是超過該時間限制但事務尚未完成,則自動回滾事務。 |
read-only | 指定事務是否爲只讀事務,默認值爲 false;爲了忽略那些不須要事務的方法,好比讀取數據,能夠設置 read-only 爲 true。 |
rollback-for | 用於指定可以觸發事務回滾的異常類型,若是有多個異常類型須要指定,各種型之間能夠經過逗號分隔。 |
no-rollback- for | 拋出 no-rollback-for 指定的異常類型,不回滾事務。 |
PROPAGATION_REQUIRED併發
PROPAGATION_SUPPORTS框架
PROPAGATION_MANDATORY性能
PROPAGATION_REQUIRES_NEW編碼
PROPAGATION_NOT_SUPPORTED.net
PROPAGATION_NEVERcode
DEFAULT
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
正確的設置@Transactional 的 rollbackFor 屬性
@Transactional 只能應用到 public 方法纔有效
避免 Spring 的 AOP 的自調用問題
@Service public class OrderService { private void insert() { insertOrder(); } @Transactional public void insertOrder() { //insert log info //insertOrder //updateAccount } }
JDBC事務
JTA事務