猿问
下载APP

Spring boot 事务失效

这是事务失效方法部分代码:

@Service
@Slf4j
public class UserServiceImpl
      extends ServiceImpl<UserMapper, SysUser>
      implements UserService {

   @Autowired
   private UserMapper userMapper;
   // TODO: 2019-12-09 事务不起作用
   @Transactional()
   @Override
   public int addUser() {
      SysUser user = new SysUser();
      user.setUsername("pengda1");
      user.setPassword("12344");

      userMapper.insert(user);

      int a = 1/0;
      return 0;

   }
}

这是调用test

@SpringBootTest
class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void trantest(){
        userService.addUser();
    }
}

这是启动类:

@SpringBootApplication
@EnableWebMvc
@EnableTransactionManagement
@MapperScan(value = "com.example.intelligentsubstationmangement.mapper")
public class IntelligentSubstationMangementApplication {

   public static void main(String[] args) {
      SpringApplication.run(IntelligentSubstationMangementApplication.class, args);
   }

}

这还不是最坑的,最坑的是,我的另外一个测试方法又是回 滚的。

@Service
@Slf4j
public class TranscationalServiceImpl extends ServiceImpl<UserMapper, SysUser> implements TranscationalService {
   @Autowired
   private UserMapper userMapper;

   // 事务使用成功,可能是mybatis-plus的通用service会影响事务
   @Transactional
   @Override
   public int addUser() {
      log.info("【事务开始】");
      SysUser user = new SysUser();
      user.setUsername("pengda1");
      user.setPassword("12344");

      userMapper.insert(user);

      int a = 1/0;

      return 0;
   }
}

我曾怀疑可能mybatia-plus 的通用service出现问题,但是后来又重新写了个

TranscationalServiceImpl

后,就发现是没有问题。但是,现在就不知到问题是出现在哪里了,明明两个方法都是一样的啊。简直迷的很。

慕哥5514020
浏览 636回答 2
2回答

乌云下的风

implements UserService  和 implements TranscationalService 是不是有区别啊

Haoming_C

应该是spring aop的原因spring的事务是依赖spring aop实现的 一个不带有spring事务的方法调用带有spring事务的方法时aop没法发现那个带有事务的方法 所以事务不生效 参见:https://www.cnblogs.com/heqiyoujing/p/11221093.html 
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答