简单示例:
1,spring 配置文件中配置事务,并开启
<!-- dbcp 数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/weipai?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="WeiPai_111111" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 启用事务管理器 --> <tx:annotation-driven transaction-manager="transactionManager" />
2,在方法上添加注解 @Transactional
// 添加注解就搞定了,如果这个方法产生异常就回滚 @Transactional public void addCart() { // 库存 -1 // 购物车 +1 }
事务的传播属性
REQUIRED:如果已经存在就使用当前事务,没有就新建,默认
REQUIRES_NEW:如果已经存在事务就挂起,当前方法会新开一个事务
@Transactional public void checkAccountBalance() { // 获取用户余额 // 获取商品价格 // 如果用户余额大于商品价格,添加到购物车 addCart(); } @Transactional(propagation=Propagation.REQUIRED) public void addCart() { // 库存 -1 // 购物车 +1 }
事务的隔离级别
参见 springboot 事务和 mysql 事务隔离级别博文