@Transactional 是什么作用?
时间: 2023-11-09 17:02:50 浏览: 269
@Transactional 是 Spring 框架中的注解,用于控制事务的提交和回滚。当一个方法被 @Transactional 注解修饰时,如果该方法抛出异常,则事务会回滚,否则事务会提交。
@Transactional 注解可以用在类级别和方法级别上。当用在类级别上时,该类中所有的公共方法都将被默认开启事务。当用在方法级别上时,只有该方法会被开启事务。
相关问题
@Transactional 注解作用详解?
`@Transactional`注解是Spring框架提供的一种声明式事务管理机制,用于标记那些希望参与到事务中的方法。这个注解的主要作用包括以下几个方面:
1. **开启事务**:当方法上标注了`@Transactional`,Spring会自动开始一个新的事务,除非配置了默认的隔离级别、传播行为或其他属性。
2. **隔离级别**:`isolation`属性允许设置事务的隔离级别,比如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,控制事务与其他事务的并发访问程度。
3. **传播行为**:`propagation`属性定义了当前方法如何处理已存在的事务。常见的值有REQUIRED(如果已有事务,则加入;若无事务,则新建)、Mandatory(必须在事务中)、Supports(支持事务但本身不在事务内)、NotSupported(不允许事务),以及NESTED(如果已有事务,则嵌套在其中)。
4. **异常管理**:如果方法中抛出异常,`@Transactional`会负责事务的回滚。如果`rollbackFor`属性指定了异常类型列表,只有这些类型的异常才会触发回滚。
5. **保存点**:`savepoint`和`rollbackToSavepoint`可用于在事务中创建和恢复保存点,这对于复杂的事务操作很有帮助。
6. **只读事务**:通过`readOnly=true`,可以标记为只读事务,数据库会优化查询计划,降低并发冲突。
7. **最终提交/回滚**:在Spring AOP中,可以通过配置`@RollbackOn`或`@CommitOn`来指定是否因特定条件而手动完成事务。
总的来说,`@Transactional`简化了事务管理,让开发者无需显式地管理开始、提交和回滚事务,提高了代码的可读性和可维护性。
查询业务中加@Transactional有什么用?
在Java的Spring框架中,`@Transactional`是一个注解,用于标记方法或整个类,表示该部分代码需要在事务上下文中执行。当你在查询业务中使用`@Transactional`,它的主要作用包括:
1. **数据一致性保障**:确保在处理数据库操作时,如果方法内有SQL查询和数据修改(如CRUD操作),这些操作会被打包成一个原子性的事务。如果其中任何一个步骤失败,整个事务会回滚,保证了数据的一致性。
2. **减少数据库访问次数**:在包含多个查询的操作中,如果没有`@Transactional`,每次查询都会独立执行,可能导致不必要的数据库连接打开和关闭。有了`@Transactional`,事务管理器会尽可能地合并这些查询,减少对数据库的频繁访问。
3. **异常传播与回滚**:如果方法中抛出了未被捕获的异常,`@Transactional`会自动回滚事务,防止部分数据已经写入数据库但事务未完成的情况。
4. **简化代码管理**:将事务管理的责任从开发者转移到了Spring这样的容器中,让代码更专注于业务逻辑,降低了错误的可能性。
5. **分布式事务支持**:虽然`@Transactional`默认适用于单个数据库操作,但在分布式系统中,Spring也提供了XA事务协调机制,使得在多数据库之间也能实现事务控制。
阅读全文