配置事务管理器,spring-mvc配置中添加:
<!-- 使用@Transactional进行声明式事务管理需要声明下面这行 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
<property name="rollbackOnCommitFailure" value="true"/>
</bean>
service中方法上添加注解@Transactional,当方法抛出异常时,状态回滚,如果catch异常,则回滚无效
@Transactional
public boolean deleteUser(String userid) throws Exception {
boolean is_success = userDao.deleteUser(userid);
if (!is_success) {
throw new Exception("失败");
}
return is_success;
}
手动实现状态回滚
//事务
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx.getBean("transactionManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//隔离级别
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(def);
try {
//用户表
int userResult = userMapper.decide_plan_user(id, plan, String.valueOf(days.intValue()), String.valueOf(Const.WORD_INIT));
if (userResult == 0){
throw new Exception();
}
//计划表
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
return ServerResponse.createByErrorMessage("更新出错!");
}