Spring的事物注解

在Spring框架中,@Transactional注解用于在方法或类级别声明事务边界。以下是@Transactional注解中一些重要的参数及其作用:

value 或 transactionManager:

指定要使用的事务管理器的名称。如果应用程序中有多个事务管理器,此参数用于明确指定哪一个。

propagation:

定义事务的传播行为。常见的值有:

REQUIRED:如果有事务存在,则加入该事务;如果没有,则创建一个新的事务(默认值)。

SUPPORTS:如果有事务存在,则加入该事务;如果没有,则以非事务的方式继续执行。

MANDATORY:如果当前存在事务,则加入该事务;否则抛出异常。

REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起当前事务。

NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起当前事务。

NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

NESTED:如果当前存在事务,则执行一个嵌套事务;如果没有,则行为类似于REQUIRED。

isolation:

设置事务的隔离级别,如ISOLATION_DEFAULT, ISOLATION_READ_UNCOMMITTED, ISOLATION_READ_COMMITTED, ISOLATION_REPEATABLE_READ, ISOLATION_SERIALIZABLE。

readOnly:

如果设置为true,则表明事务只读,这样某些数据库可以做出优化,如不记录日志。

timeout:

设置事务的超时时间,单位为秒。如果事务未在此时间内完成,则将被回滚。

rollbackFor:

指定引发回滚的异常类型。如果方法中抛出了这些类型的异常,事务将被回滚。

noRollbackFor:

指定即使方法抛出这些异常类型,事务也不会回滚。

transactionListener:

允许注册事务监听器,以便在事务开始和结束时执行特定操作。

access:

指定事务方法调用的访问类型,如ACCESS_STATIC, ACCESS_EXTERNAL,但在Spring 4.3之后,此参数已被弃用。

在使用@Transactional注解时,理解这些参数的意义和作用是非常关键的,因为它们直接决定了事务的行为和边界。正确配置这些参数可以帮助你更好地控制事务的生命周期和行为,从而避免潜在的事务相关的问题。