为什么要网站备案,广州天拓做网站吗,温州好的网站推广,企业官网有哪些Spring 事务
事务的基本概念
#x1f539; 什么是事务#xff1f;
事务是一组数据库操作#xff0c;它们作为一个整体#xff0c;要么全部成功#xff0c;要么全部回滚。 常见的事务场景#xff1a; 银行转账#xff08;扣款和存款必须同时成功#xff09; 订单系统…Spring 事务
事务的基本概念 什么是事务
事务是一组数据库操作它们作为一个整体要么全部成功要么全部回滚。 常见的事务场景 银行转账扣款和存款必须同时成功 订单系统创建订单和扣减库存必须同时成功 事务的四大特性ACID
特性说明A原子性Atomicity事务中的所有操作要么全部成功要么全部失败C一致性Consistency事务执行后数据库状态必须保持一致I隔离性Isolation并发事务之间不会互相影响D持久性Durability事务提交后数据被永久保存
事务分为两种:
声明式事务:
使用Spring的Transactional注解来管理事务
当 name 为 error 时抛出异常事务回滚数据不会被插入数据库。
当 name 为 John 时正常插入数据事务提交。
编程式事务:
需要手动控制的事务
事务控制的步骤 配置数据库连接 将食物管理器加尔uioc容器,并将数据库连接的对象传入事务管理器 在配置类上方写上EnableTransactionManagement注解,表示开启事务管理 在要开启事务的方法上写Transactional注解 事务的属性
1.只读readonly
设置方式在Transactional注解中加上属性readOnly设置为true即此方法的事务操作为只读模式如果有DML的语句就会报错。 防止误修改数据如果在 readOnly true 的事务中尝试修改数据可能会抛出异常取决于数据库。
适用于只读操作如 查询数据但不涉及 插入、更新、删除 操作。
2.时间超时timeout
设置方式: 在Transactional注解中加上属性timeout xx ,此时事务若长时间占用资源,会自动回滚
3.rollbackFor
Transactional(rollback Exception.class)用于指定哪写异常需要回滚
3.noRollbackFor
Transactional(rollback Exception.class)用于指定哪写异常不需要回滚
4.Isolation Level
隔离级别有四种 1.READ_UNCOMMITTED(允许脏读) 修改表数据,即使事务未提交也可以查询到修改数据(脏读) 2.READ_COMMITTED 防止了脏读,会发生不可重复读(事务1开启,查询一个数据,还未提交,事务二修改一个数据并提交,此时用事务一再查询,得到的是修改后的数据) 3.REPEATABLE_READ 防止了不可重复读,可能发生幻读(和不可重复读类似,但不可重复读是数据修改,幻读是新增或删除数据) 4.SERIALIZABLE 此为做高级别,可以防止以上全部情况 推荐 READ_COMMITTED 作为默认隔离级别防止脏读性能较好。
对于高并发场景如库存管理建议 REPEATABLE_READ防止不可重复读。
对于金融级别的事务如转账使用 SERIALIZABLE确保数据一致性但性能较差。
避免 READ_UNCOMMITTED因为它可能导致数据不一致问题。
propagation传播
名称含义REQUIRED默认值如果父方法有事务就加入如果没有就新建自己独立REQUIRES_NEW不管父方法是否有事务我都新建事务都是独立的