V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kaka8wp  ›  全部回复第 3 页 / 共 10 页
回复总数  189
1  2  3  4  5  6  7  8  9  10  
2017-11-23 09:44:43 +08:00
回复了 strongme 创建的主题 Java springboot service 事物回滚的问题
在 springBoot 使用事物时,发现事务并没有正常执行,没有进行回滚。
[java] view plain copy
@GetMapping("add")
@ResponseBody
@Transactional
public void add(String companyName,String name){
companyDao.add(companyName);
try {
userDao.addUser(name);
}catch (DuplicateKeyException e){//这里在数据库将 name 设置成 unique key
logger.error("添加失败。姓名:[ {} ],已存在",name);
return new MyException("添加失败,名字已存在");//自定义异常 继承 Exception
}
}


上述姓名重复时发现,公司名称依然添加成功,并没有进行回滚操作。

分析:默认 spring 事务只在发生未被捕获的 RuntimeException 时才回滚。
spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样 aop 代理才能捕获到方法的异常,才能进行回滚,默认情况下 aop 只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回滚
换句话说在 service 的方法中不使用 try catch 或者在 catch 中最后加上 throw new runtimeexcetpion (),这样程序异常时才能被 aop 捕获进而回滚
解决办法:
1.首先确认数据库支持事务。即为 InnoDB。
方案一:手动回滚。给注解加上参数如:@Transactional(rollbackFor=Exception.class)
方案二:如上述分析。MyException 改为继承 RuntimeException 的异常。并且在 service 上层要继续捕获这个异常并处理
方案三:在 service 层方法的 catch 语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常

链接: http://blog.csdn.net/bestlovelymin/article/details/74942932
2017-11-17 16:35:24 +08:00
回复了 uilvn 创建的主题 问与答 大家最近在看什么书?
巨人的陨落
2017-11-16 18:28:47 +08:00
回复了 kaka8wp 创建的主题 北京 申通快递是真的慢
@xuanboyi 是得,到我家这个区的派送点了 2 天了还没送到
@lneoi 已经申请退差价,等待审核
@goodniuniu 是啊,居然参与膨胀金的不是最便宜,气人
@sephinh 嗯呢,问了第一个客服说不能退差价,换了一个客服说可以先申请退差价,以退运费方式退 20
@yjxjn 我是想申请退差价
@aniskin 我是想申请退差价的,不是全额退款
重新问了另一个客服,这个客服说又能退了,让我申请退运费,等待结果
很无奈
客服回答:
亲,我们预售的话您现在付了定金 到时候付了尾款的话是一定可以订购到商品的呢
已读

如果是当天购买的话,是不能保证的一定能购买的到的呢
刚刚问王卡助手客服,说腾讯旗下软件不用手动激活,正常使用免流量
@lzsadam 我的斗鱼已经绑定了,腾讯视频还不行
@hanity 嗯呢,我也没太注意流量,感觉上好像是免流量了
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3138 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 13:27 · PVG 21:27 · LAX 06:27 · JFK 09:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.