基于Annotation方式的声明式事务

霄
2022-02-24 / 0 评论 / 102 阅读 / 正在检测是否收录...

创建 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"/>

(3)在业务层使用@Transactional 注解

@Service("accountService")
//只读型事务的配置
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    //需要的是读写型事务配置
    @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
    @Override
    public void transfer(String sourceName, String targetName, Float money) {
        //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);
    }
}

扫描二维码,在手机上阅读!
5

评论

博主关闭了当前页面的评论