默认spring事务只在发生未被捕获的 runtimeexcetpion(运行期异常)时才回滚。
spring aop 异常捕获原理:
被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过配置来捕获特定的异常并回滚,换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚。
spring aop 异常捕获原理:
被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过配置来捕获特定的异常并回滚,换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚。
2018-03-29
是因为同一个商品不同人去购买,生成了多条记录
但是成功后返回SuccessKilled实体的方法
SuccessKilled successKilled = successKilledDao.queryByIdWithSeckill(seckillId);
是根据seckillId查的,因此如果该商品被多个人秒杀时,会返回多条记录
则报错
Expected one result (or null) to be returned by selectOne()
应该将方法修改为queryByIdWithSeckill(seckillId,userPhone);比较合适
但是成功后返回SuccessKilled实体的方法
SuccessKilled successKilled = successKilledDao.queryByIdWithSeckill(seckillId);
是根据seckillId查的,因此如果该商品被多个人秒杀时,会返回多条记录
则报错
Expected one result (or null) to be returned by selectOne()
应该将方法修改为queryByIdWithSeckill(seckillId,userPhone);比较合适
2018-02-24
我也遇到如下这个问题
Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
2018-02-24
最新回答 / SsssZzzz
异常日志大概意思是slf4j的LoggerFactory的实现类被绑定到log4j的Log4jFactory上。应该是maven配置的依赖关系出了问题,你可能配置了log4j作为slf4j接口的实现这个项目整个日志模块只需要配一个logback-classic就行了 它自动依赖slf4j api<...code...>
2018-02-13