spring聲明式的事務管理

spring支持聲明式事務管理編程式事務管理兩種方式。spring

編程式事務使用TransactionTemplate來定義,可在代碼級別對事務進行定義。數據庫

聲明式事務基於aop來實現,缺點是其最細粒度的事務聲明只能到方法級別。編程

聲明式事務管理有兩種經常使用的方式,一種是基於tx和aop名字空間的xml配置文件,另外一種就是基於@Transactional註解。spa

    <!-- 配置事務管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入數據庫鏈接池 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 配置基於註解的聲明式事務 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

事務的隔離級別和超時回滾默認基於底層數據庫。設計

2. @Transactional註解能夠對事務實現元數據的配置。code

public class TransactionalService {
    @Transactional("order")
    public void setSomething(String name) { ... }
    @Transactional("account")
    public void doSomething() { ... }
}

xml中應用的上下文聲明:xml

<tx:annotation-driven/>
    <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        ...
        <qualifier value="order"/>
    </bean>

    <bean id="transactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        ...
        <qualifier value="account"/>
    </bean>

 

spring事務的回滾規則:blog

  默認狀況下,spring在當前事務的上下文拋出一個非檢查性異常(同時包括error),即運行時異常(RuntimeException)和其子類時,事務纔會回滾。也就是說,默認狀況下,spring在程序運行時拋出IOException等一些非運行時異常是不會回滾的,只有在因爲程序設計漏洞而拋出的RuntimeException(好比NullPointerException)或者error時,事務纔回滾。事務

相關文章
相關標籤/搜索