spring框架:事务注解整理

发布时间:2024年01月02日

@EnableTransactionManagement启用Spring基于注解的事务管理功能,需要和@Configuration注解一起使用。

@Transactional表示方法和类需要开启事务,当作用与类上时,类中所有方法均会开启事务,当作用于方法上时,方法开启事务,方法上的注解无法被子类所继承。

Spring定义了七种传播方式

TransactionDefinition.PROPAGATION_REQUIRED:"如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。"

TransactionDefinition.PROPAGATION_REQUIRES_NEW:"创建一个新的事务,如果当前存在事务,则把当前事务挂起。"

TransactionDefinition.PROPAGATION_SUPPORTS:"如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。"

TransactionDefinition.PROPAGATION_NOT_SUPPORTED:"以非事务方式运行,如果当前存在事务,则把当前事务挂起。"

TransactionDefinition.PROPAGATION_NEVER:"以非事务方式运行,如果当前存在事务,则抛出异常。"

TransactionDefinition.PROPAGATION_MANDATORY:"如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。"

TransactionDefinition.PROPAGATION_NESTED:"如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;"、"如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。"

Spring中定义了五种隔离规则

@Transactional(isolation = Isolation.DEFAULT)

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

@Transactional(isolation = Isolation.READ_COMMITTED)

@Transactional(isolation = Isolation.REPEATABLE_READ)

@Transactional(isolation = Isolation.SERIALIZABLE)

回滚规则

@Transactional(rollbackFor = Exception.class)

事务超时

@Transactional(timeout=30)

是否只读

@Transactional(readOnly = true)

事务失效

@Transactional注解未打在public方法上

目标方法用final修饰

同一个类中的方法直接内部调用原因:方法被事务管理是因为Apring AOP为其生成代理了对象,但是直接this调用同类方

文章来源:https://blog.csdn.net/u010605984/article/details/135322106
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。