5.SpringBoot开启声明式事务

  1. 简介
  2. 构建
    1. 编码
    2. 测试
    3. 问题1:

简介

springboot开启事务很简单,只需要一个注解@Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器。

构建

项目在之前整合mybatis工程的基础上
本编基于xml实现mybatis的数据访问层,并开启声明式事务。

编码

dao层

public interface UserMapper2 {
    int update(@Param("name") String name,@Param("id") int id);
}

对应mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaofine.springbootmybatis.dao.UserMapper2">
    <update id="update">
        UPDATE user set name=#{name} WHERE id=#{id}
    </update>
</mapper>

service层

@Service
public class UserService2 {

    @Autowired()
    private UserMapper2 userMapper2;

    @Transactional
    public void transfer() throws RuntimeException{
        userMapper2.update("22235111566",1);
        int i=1/0;
        userMapper2.update("333",2);
    }

}

controller层

@RestController()
@RequestMapping("/user")
@MapperScan("com.xiaofine.springbootmybatis.dao")
public class UserController2 {

    @Autowired
    UserService2 userService2;

    @RequestMapping("/transfer")
    public void transfer(){
        userService2.transfer();
    }
}

测试

保存时 不修改id为1的user的内容,也不修改id为2的user。
去掉@Transactional id为1的的user.name修改了,id为2的没有修改

问题1:

当@Transactional事务不生效的时候,可以遵循以下排查步骤:

1、查看数据库或表,设置的引擎。MyISAM是不支持事务的,必须改为InnoDb。

2、@Transactional注解的方法是否为public。

如果应用在protected、private或者 package的方法上,不会报错,但是事务设置不会起作用。

3、@Transactional所注解的方法所在的类,是否已经使用了注解@Service或@Component等。

4、需要调用该方法,且需要支持事务特性的调用方,是在 @Transactional所在的类的外面。

注意:类内部的其他方法调用这个注解了@Transactional的方法,事务是不会起作用的。

5、注解为事务范围的方法中,事务的回滚仅仅对于unchecked的异常有效。对于checked异常无效。也就是说事务回滚仅仅发生在


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。

文章标题:5.SpringBoot开启声明式事务

本文作者:xiaofine

发布时间:2020-03-21, 21:47:43

最后更新:2020-03-22, 08:24:20

原始链接:https://xiaofine1122.github.io/2020/03/21/5.SpringBoot%E5%BC%80%E5%90%AF%E5%A3%B0%E6%98%8E%E5%BC%8F%E4%BA%8B%E5%8A%A1/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录