千家信息网

什么是SpringBoot事务

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,什么是SpringBoot事务?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。重要概念自动提交模式对于mysql数据库,默
千家信息网最后更新 2026年11月01日什么是SpringBoot事务

什么是SpringBoot事务?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

重要概念

自动提交模式

对于mysql数据库,默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务。对于正常的事务管理,是一组相关的操作处于一个事务之中,因此必须关闭数据库的自动提交模式,下面是查看方式:

查看是否自动提交命令(ON表示开启自动提交,值为1,OFF表示关闭自动提交,值为0):

show variables like 'autocommit';

关闭自动提交后,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。

DataSource connection = masterDataSource.getConnection();connection.setAutoCommit(false);

事务隔离级别

隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:

1、TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。

2、TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。

3、TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。

4、TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。

5、TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

事务传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:

1、TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。

2、TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。

3、TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

4、TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

5、TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

6、TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

7、TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

保护点(Savepoints)

首先要知道savepoint就是为回退做的,savepoint的个数没有限制,savepoint和虚拟机中快照类似. savepoint是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。

当执行rollback时,通过指定保存点可以回退到指定的点。

回退事务的几个重要操作

1、设置保存点 savepoint a

2、取消保存点a之后事务 rollback to a

3、取消全部事务 rollback

注意:这个回退事务,必须是没有commit前使用的;

public class UserRepository {                 private DataSource masterDataSource;        private Connection connection = null;        @Autowired        public void setMasterDataSource(DataSource masterDataSource) {                this.masterDataSource = masterDataSource;        }          @Transactional        public boolean save(User user) {                try {                        connection = masterDataSource.getConnection();                        connection.setAutoCommit(false);                        //设置保护点                        Savepoint saveUser = connection.setSavepoint("saveUser");                        PreparedStatement prepareStatement = connection.prepareStatement("insert into user(id,name,age) values(?,?,?)");                        prepareStatement.setLong(1, user.getId());                        prepareStatement.setString(2, user.getName());                        prepareStatement.setInt(3, user.getAge());                        prepareStatement.execute();                                        try {                                update(user);                        } catch (Exception e) {                                System.out.println("出错了。。"+e);                                //回滚至保护点                                connection.rollback(saveUser);                        }                        connection.commit();                                        } catch (SQLException e) {                        e.printStackTrace();                } finally {                        try {                                connection.close();                        } catch (SQLException e) {                                e.printStackTrace();                        }                }                                return true;        }                public boolean update(User user) {                System.out.println("save user:"+user);                                try {                        PreparedStatement prepareStatement = connection.prepareStatement("update user set name = ? ,age = ? where id = ?)");                        prepareStatement.setLong(3, user.getId());                        prepareStatement.setString(1, "王大拿");                        prepareStatement.setInt(2, 100/0);                        prepareStatement.execute();                                                connection.commit();                                        } catch (SQLException e) {                        e.printStackTrace();                }                                return true;        }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

事务 级别 隔离 数据 数据库 方式 行为 运行 情况 模式 语句 传播 保护 重要 之间 就是 常量 这是 部分 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 成都互联网科技公司 互联网科技视频素材 互联网科技公司介绍 居家互联网科技有限公司 深圳国际航运科技和互联网 互联网科技项目计划书材料类 受益于互联网科技的高速发展 浙南科技城互联网大厦建设工程 互联网科技和法律行业 阿里互联网科技企业 群盈汇互联网科技有限公司 互联网金融科技元年 每天都有哪些好的互联网科技 深圳互联网科技的发展 新氧科技和美国互联网有关系吗 西安有哪些互联网高科技企业 广州三三互联网科技有限公司 杭州科技互联网公司有哪些 互联网 科技节活动 微视频大赛 喔噻互联网科技有限公司 互联网和科技创新 网络科技有限互联网 科技服务与互联网 互联网科技小贷 碳银互联网科技有限公司 互联网科技与大数据专业 互联网安防科技感 科技互联网公司两年变化 杭州科技互联网公司有哪些
0