铁岭市做网站,网站开发三剑客,简单的营销自动化,网址域名注册阿里云目录 1.什么是事务#xff1f; 2.事务的四大特性#xff1f; 3.SpringBoot中怎样开启事务 1.开启事务支持 2.在需要开启事务的方法或类上使用Transactional 3.通过配置类来开启全局事务 1.什么是事务#xff1f;
事务是指在数据库管理系统中执行的一系列操作的逻辑单元。事… 目录 1.什么是事务 2.事务的四大特性 3.SpringBoot中怎样开启事务 1.开启事务支持 2.在需要开启事务的方法或类上使用Transactional 3.通过配置类来开启全局事务 1.什么是事务
事务是指在数据库管理系统中执行的一系列操作的逻辑单元。事务可以由一个或多个数据库操作例如插入、更新、删除等组成这些操作被视为一个不可分割的工作单元。在事务中要么所有的操作都成功执行要么所有的操作都不执行不会出现部分操作成功而部分操作失败的情况。
事务注解属性 传播行为Propagation指定事务的传播行为即定义了事务方法调用之间的关系。常见的传播行为包括 REQUIRED如果当前存在事务则加入该事务如果不存在事务则创建一个新事务。REQUIRES_NEW无论当前是否存在事务都创建一个新事务并暂停当前事务如果存在。SUPPORTS如果当前存在事务则加入该事务如果不存在事务则以非事务方式执行。NOT_SUPPORTED以非事务方式执行如果当前存在事务则挂起该事务。 隔离级别Isolation Level指定事务的隔离级别即定义了事务之间的可见性和并发控制的程度。常见的隔离级别包括 READ_UNCOMMITTED允许读取未提交的数据可能导致脏读、不可重复读和幻读问题。READ_COMMITTED只能读取已提交的数据避免了脏读问题但可能导致不可重复读和幻读问题。REPEATABLE_READ在同一个事务中多次读取数据时保证数据的一致性避免了脏读和不可重复读问题但可能导致幻读问题。SERIALIZABLE最高级别的隔离级别完全隔离事务避免了脏读、不可重复读和幻读问题。 回滚规则Rollback Rules指定事务在遇到特定异常时是否回滚。可以定义多个回滚规则每个规则可以配置一个或多个异常类型。如果事务抛出了与回滚规则匹配的异常事务将回滚。 超时时间Timeout指定事务的最大执行时间。如果事务执行时间超过指定的超时时间事务将被强制回滚。
2.事务的四大特性
通常被称为ACID特性 原子性Atomicity事务被视为一个不可分割的操作单元要么全部执行成功要么全部不执行。如果任何一部分操作失败整个事务将被回滚到最初状态所有的修改都会被撤销。 一致性Consistency事务执行前后数据库的状态必须保持一致。这意味着事务的操作必须满足数据库的约束和规则以确保数据的完整性和有效性。 隔离性Isolation在并发环境下多个事务可能同时执行。隔离性指的是每个事务的操作应该与其他事务相互隔离使得每个事务都感觉不到其他事务的存在避免了并发执行可能导致的数据不一致问题。 持久性Durability一旦事务提交成功其所做的修改将永久保存在数据库中即使在系统发生故障或重启之后也不会丢失。
事务的特点 通过使用事务可以保证数据库的数据一致性和完整性同时提供并发控制和故障恢复的机制确保数据库系统的可靠性和可用性。
3.SpringBoot中怎样开启事务 1.开启事务支持
在启动类中使用EnableTransactionManagement开启事务支持
package com.cssl;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;SpringBootApplication
EnableTransactionManagement//开启事务支持
MapperScan(com.cssl.mapper)
public class HospitalHouApplication {public static void main(String[] args) {SpringApplication.run (HospitalHouApplication.class, args);}} 2.在需要开启事务的方法或类上使用Transactional 事务中的注解属性 propagation指定事务的传播行为。可以设置为 Propagation.REQUIRED、Propagation.REQUIRES_NEW、Propagation.SUPPORTS、Propagation.NOT_SUPPORTED 等。 isolation指定事务的隔离级别。可以设置为 Isolation.DEFAULT、Isolation.READ_UNCOMMITTED、Isolation.READ_COMMITTED、Isolation.REPEATABLE_READ、Isolation.SERIALIZABLE 等。 readOnly指定事务是否为只读事务。如果设置为 true则事务只能读取数据不能修改数据。这可以用于提高性能。 timeout指定事务的超时时间单位为秒。如果事务执行时间超过指定的超时时间事务将被回滚。 rollbackFor 和 noRollbackFor指定事务回滚的异常类型。rollbackFor 属性用于指定需要回滚的异常类型noRollbackFor 属性用于指定不需要回滚的异常类型。 rollbackForClassName 和 noRollbackForClassName与上述属性类似但可以通过异常类名的字符串形式指定异常类型。 3.通过配置类来开启全局事务 优点
集中配置事务管理器灵活的事务配置选项多数据源支持代码整洁性和可维护性与其他配置的集成 创建一个AopConfig的事务配置类
Aspect
Configuration
public class AopConfig {private final static int TX_METHOD_TIME_OUT 10;private static final String POITCUT_EXPRESSION execution(* com.test.sketelon.service.*.*(..));Autowiredprivate PlatformTransactionManager platformTransactionManager;Beanpublic TransactionInterceptor txadvice() {NameMatchTransactionAttributeSource source new NameMatchTransactionAttributeSource ();MapString, TransactionAttribute nameMap new HashMap (16);RuleBasedTransactionAttribute readOnlyRule new RuleBasedTransactionAttribute ();readOnlyRule.setReadOnly (true);readOnlyRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);RuleBasedTransactionAttribute requireRule new RuleBasedTransactionAttribute ();requireRule.setRollbackRules (Collections.singletonList (new RollbackRuleAttribute (Exception.class)));requireRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);requireRule.setTimeout (TX_METHOD_TIME_OUT);nameMap.put (add*, requireRule);nameMap.put (save*, requireRule);nameMap.put (insert*, requireRule);nameMap.put (update*, requireRule);nameMap.put (delete*, requireRule);nameMap.put (remove*, requireRule);nameMap.put (batch*, requireRule);nameMap.put (get*, readOnlyRule);nameMap.put (query*, readOnlyRule);nameMap.put (find*, readOnlyRule);nameMap.put (select*, readOnlyRule);nameMap.put (count*, readOnlyRule);source.setNameMap (nameMap);return new TransactionInterceptor (platformTransactionManager, source);}Beanpublic Advisor txAdviceAdvisor() {AspectJExpressionPointcut pointcut new AspectJExpressionPointcut ();pointcut.setExpression (POITCUT_EXPRESSION);return new DefaultPointcutAdvisor (pointcut, txadvice ());}
}到这就完成了