1. 程式人生 > >Spring的4種事務管理(1種程式設計式事務+三種宣告事務)

Spring的4種事務管理(1種程式設計式事務+三種宣告事務)

Spring4種事務管理(1種程式設計式事務+三種宣告事務)

·        TransactionTemplate可以實現程式設計式事務

·        Spring使用AOP來實現宣告式事務

一、Spring事務的介紹

二、程式設計式事務xml的配置

配置spring-dao.xml中

1.       OrderServiceImpl中使用TransactionTemplate

2.       TransactionTemplate依賴DataSourceTransactionManager

3.       DataSourceTransactionManager依賴DataSource

資料來源構造

<bean id="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">

    <propertyname="transactionManager"ref="transactionManager"></property>

</bean>

<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<propertyname="dataSource" ref="dataSource"/>

在baseManager.java中

public class BaseManager {

    private static final Loggerlog = Logger.getLogger(BaseManager.class);

//    privatePlatformTransactionManager transactionManager;

    private TransactionTemplatetransactionTemplate;

//    public TransactionTemplategetTransactionManager() {

//        return new TransactionTemplate(transactionManager);

//    }

//

//    public voidsetTransactionManager(PlatformTransactionManager transactionManager) {

//        this.transactionManager= transactionManager;

//    }

    public TransactionTemplategetTransactionManager() {

        returntransactionTemplate;

    }

    public voidsetTransactionTemplate(TransactionTemplate transactionTemplate) {

        this.transactionTemplate= transactionTemplate;

    }

}

在orderManagerImpl中

public boolean updateOrderById(final Order order) throws Exception {

        finalTransactionTemplate transactionTemplate = this.getTransactionManager();

        Boolean result =(Boolean)transactionTemplate.execute(new TransactionCallback() {

            @Override

            public ObjectdoInTransaction(TransactionStatus status) {

                try {

業務……

                    return true;

                }catch (Exceptione){

                   log.error("修改失敗,id"+order.getId());

                    status.setRollbackOnly();//回滾

                    return false;

                }

            }

        });

        return result;

}

三、基於AOP方式的宣告式事務管理

prop的具體配置

使用AOP宣告式事務是時service層必須注入代理類

四、基於AspectJ的宣告式事務

基於AspectJxml配置

傳播行為的配置

五、基於註解方式的宣告式事務管理

在配置spring-dao.xml中

<tx:annotation-driventransaction-manager="transactionManager"/>

    <beanid="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">

        <propertyname="transactionManager"ref="transactionManager"></property>

   </bean>

在需要使用事務的類上添加註解即可 @Transactional

@Transactional
    public boolean updateOrderById(final Order order) throws Exception { …… }

註解方式的傳播行為配置

學習總結:

Spring將事務管理分為了兩類:

一、程式設計式事務管理

需要手動編寫程式碼進行事務的管理(一般不用)

二、宣告式事務管理:

 1、基於TransactionProxyFactoryBean的方式(很少使用)

需要為每個事務管理的類配置一個TransactionProxyFactoryBean進行管理。使用時還需要在類中注入該代理類。

2、基於AspectJ的方式(常使用)

配置好之後,按照方法的名字進行管理,無需再類中新增任何東西。

3、基於註解的方式(經常使用)

配置簡單,在業務層類上添加註解@Transactional