spring中基于注解的声明式事务控制配置步骤

1.配置事务管理器

<!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2.开启spring对注解事务的支持

<!--开启spring对注解事务的支持-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

3.在需要事务支持的地方使用@Transaction注解

在AccountService上或者里面的方法上写

@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)

@Transactional(propagation = Propagation.REQUIRED,readOnly = false)

示例:

package net.togogo.service.impl;

import net.togogo.bean.Account;
import net.togogo.dao.IAccountDao;
import net.togogo.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service("accountService")
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;

    public Account findAccountById(Integer id) {
        return accountDao.findAccountById(id);
    }

    @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
    public void transfer(String sourceName, String targetName, Float money) {
        System.out.println("transfer....");
        //2.1根据名称查询转出账户
        Account source = accountDao.findAccountByName(sourceName);
        //2.2根据名称查询转入账户
        Account target = accountDao.findAccountByName(targetName);
        //2.3转出账户减钱
        source.setMoney(source.getMoney()-money);
        //2.4转入账户加钱
        target.setMoney(target.getMoney()+money);
        //2.5更新转出账户
        accountDao.updateAccount(source);

        //异常
//        int i=1/0;

        //2.6更新转入账户
        accountDao.updateAccount(target);

    }
}

发布了31 篇原创文章 · 获赞 1 · 访问量 248

猜你喜欢

转载自blog.csdn.net/weixin_41605945/article/details/104512136