事務模板接入(spring的編程式事務)

事務模板接入

這裏接入的是spring的編程式事務,代理一下spring的TransactionTemplate就可以了。

 

import org.springframework.transaction.TransactionException;

import org.springframework.transaction.support.TransactionCallback;

import org.springframework.transaction.support.TransactionTemplate;

 

/**

 * 事務模板

 *

 * @author jiacheng.yjc

 * @version $Id: TranscationTemplate.java, v 0.1 2015年11月18日 上午11:17:58 jiacheng.yjc Exp $

 */

public class TrancTemplateImpl implements TrancTemplate {

 

    private TransactionTemplate transactionTemplate;

    //這個是爲了一個事務不夠的時候也不用再new一個,直接用這個就行

    private TransactionTemplate transactionNewTemplate;

 

    /**

     *

     * @see com.mybank.bkloanapply.core.service.component.tx.TrancTemplate#execute(org.springframework.transaction.support.TransactionCallback)

     */

    @Override

    public <T> T execute(TransactionCallback<T> actionthrows TransactionException {

        return transactionTemplate.execute(action);

    }

 

    /**

     *

     * @see com.mybank.bkloanapply.core.service.component.tx.TrancTemplate#executeReqNew(org.springframework.transaction.support.TransactionCallback)

     */

    @Override

    public <T> T executeReqNew(TransactionCallback<T> actionthrows TransactionException {

        return transactionNewTemplate.execute(action);

    }

 

    /**

     * Setter method for property <tt>transactionTemplate</tt>.

     *

     * @param transactionTemplate value to be assigned to property transactionTemplate

     */

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {

        this.transactionTemplate = transactionTemplate;

    }

 

    /**

     * Setter method for property <tt>transactionNewTemplate</tt>.

     *

     * @param transactionNewTemplate value to be assigned to property transactionNewTemplate

     */

    public void setTransactionNewTemplate(TransactionTemplate transactionNewTemplate) {

        this.transactionNewTemplate = transactionNewTemplate;

    }

}

 

模板的接入使用

/**

     * 測試用例,插入一條日誌記錄

     *

     */

    @Override

    public String logTest(LogModel logModel) {

        final LogModel logModel_ = logModel;

        trancTemplate.execute(new TransactionCallback<LogModel>() {

            @Override

            public LogModel doInTransaction(TransactionStatus status) {

                logComponent.insert(logModel_);

                //do otherthings…

                return logModel_;

            }

        });

        return "執行成功";

}

當insert語句執行出錯或者do otherthings時出錯都會自動回滾,不需要手動trycatch然後status.setRollbackOnly();回滾,很方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章