Spring框架(JavaEE开发进阶Ⅲ)—Spring中的编码事务

一、主要内容

1、Spring中的编码事务

二、Spring中的编码事务

1、要在应用中更好控制事务边界,编码式事务是合适的选择
2、以myTwitter项目中信息服务类MessageService的saveMessage()作为事务方法的例子:
public void saveMessage(Message message) {
    messageDao.saveMessage(message);
}
1)添加事务的一种方式是在saveMessage()方法中直接通过编码,使用Spring的TransactionTemplate来添加事务性边界,TransactionTemplate使用回调机制:
public void saveMessage(final Message message) {
    txTemplate.execute(new TransactionCallback<Void>() {
        public void doInTransaction(TransactionStatus txStatus) {
            try {
                messageDao.saveMessage(message);
            } catch (RuntimeException e) {
                txStatus.setRollbackOnly();
                throw e;
            }
            return null;
        }
    });
}
3、为了使用TransactionTemplate,需要实现TransactionCallback接口,其中唯一方法doInTransaction()实现事务性代码
4、调用TransactionTemplate实例的execute()方法时,将会执行TransactionCallback实例中的代码,如果遇到问题,调用TransactionStatus对象的setRollbackOnly方法来回滚事务,否则odInTransaction()成功返回,事务提交
5、由于Spring事务管理基于TransactionSynchronizationManager(事务同步管理器)进行工作,所以如果在回调方法中需要显示访问底层数据连接,必须通过资源获取工具得到线程绑定的数据连接
6、TransactionTemplate需要注入到MessageService中
<bean id="messageService" class="com.iotek.myTwitter.service.MessageService">
    ...
    <property name="transactionTemplate">
        <bean class="org.springframework.transaction.support.TransactionTemplate">
            <property name="transactionManager" ref="transactionManager"/>
        </bean>
    </property>
</bean>
PS:事务模版要用到事务管理器,这个事务管理器和特定的持久化框架相关
把事务管理器注入到事务模版,把事务模版注入到service中去

阅读更多
个人分类: spring3框架
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭