赞
踩
目录
2.在需要开启事务的方法或类上使用@Transactional
事务是指在数据库管理系统中执行的一系列操作的逻辑单元。事务可以由一个或多个数据库操作(例如插入、更新、删除等)组成,这些操作被视为一个不可分割的工作单元。在事务中,要么所有的操作都成功执行,要么所有的操作都不执行,不会出现部分操作成功而部分操作失败的情况。
事务注解属性:
传播行为(Propagation):指定事务的传播行为,即定义了事务方法调用之间的关系。常见的传播行为包括:
隔离级别(Isolation Level):指定事务的隔离级别,即定义了事务之间的可见性和并发控制的程度。常见的隔离级别包括:
回滚规则(Rollback Rules):指定事务在遇到特定异常时是否回滚。可以定义多个回滚规则,每个规则可以配置一个或多个异常类型。如果事务抛出了与回滚规则匹配的异常,事务将回滚。
超时时间(Timeout):指定事务的最大执行时间。如果事务执行时间超过指定的超时时间,事务将被强制回滚。
通常被称为ACID特性
原子性(Atomicity):事务被视为一个不可分割的操作单元,要么全部执行成功,要么全部不执行。如果任何一部分操作失败,整个事务将被回滚到最初状态,所有的修改都会被撤销。
一致性(Consistency):事务执行前后,数据库的状态必须保持一致。这意味着事务的操作必须满足数据库的约束和规则,以确保数据的完整性和有效性。
隔离性(Isolation):在并发环境下,多个事务可能同时执行。隔离性指的是每个事务的操作应该与其他事务相互隔离,使得每个事务都感觉不到其他事务的存在,避免了并发执行可能导致的数据不一致问题。
持久性(Durability):一旦事务提交成功,其所做的修改将永久保存在数据库中,即使在系统发生故障或重启之后也不会丢失。
事务的特点: 通过使用事务,可以保证数据库的数据一致性和完整性,同时提供并发控制和故障恢复的机制,确保数据库系统的可靠性和可用性。
在启动类中使用@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);
- }
-
- }
事务中的注解属性:
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
:与上述属性类似,但可以通过异常类名的字符串形式指定异常类型。
优点:
创建一个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.*.*(..))";
- @Autowired
- private PlatformTransactionManager platformTransactionManager;
-
- @Bean
- public TransactionInterceptor txadvice() {
-
- NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource ();
- Map<String, 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);
- }
-
-
- @Bean
- public Advisor txAdviceAdvisor() {
- AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut ();
- pointcut.setExpression (POITCUT_EXPRESSION);
- return new DefaultPointcutAdvisor (pointcut, txadvice ());
- }
- }
到这就完成了!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。