Spring中配置事务属性

tech2024-08-11  46

Spring中配置事务属性

通常采用简单的注解配置属性: @Transactional(属性名称=属性值)

Isolation 指定事务的隔离级别@Transactional(isolation = Isolation.DEFAULT)

读已提交 READ_COMMITTED读未提交 READ_UNCOMMITTED可重复读 REPEATABLE_READ串行化 SERIALIZABLE默认值 DEFAULT: (MySQL: 可重复读、Oracle: 读已提交)

timeout 设置单位为秒的超时。 默认值是 -1 表示使用数据库的设置。

readOnly 设置是否是只读事务(常用,用来标识是否是只读操作)。@Transactional(readOnly = false)

当你能确保整个事务过程中只对数据库执行Select操作的时候,如果将此属性设置为true,则会自动进行优化,提高性能。

Propagation 事务的传播属性(特有的精细化的控制),解决的是事务嵌套的问题,例如:service依赖其他多个service进行数据操作,并且需要保证各个service执行中的事务控制@Transactional(propagation = Propagation.SUPPORTS)

SUPPORTS(1), //支持 Support a current transaction, execute non-transactionally if none exists. 支持当前事务,如果当前没事务,则在非事务的环境下执行。 MANDATORY(2), //强制要求 Support a current transaction, throw an exception if none exists. 支持当前事务,如果当前没事务则抛出异常。 NOT_SUPPORTED(4), //不支持 Execute non-transactionally, suspend the current transaction if one exists. 在非事务的环境下执行,如果当前存在事务,则挂起当前事务。 NEVER(5), //从不使用 Execute non-transactionally, throw an exception if a transaction exists. 在非事务的环境下执行,如果当前存在事务,则抛出异常。 REQUIRES_NEW(3), //要求新的 Create a new transaction, and suspend the current transaction if one exists. 总是创建一个新的事务,如果当前有事务则挂起当前事务。 REQUIRED(0), //要求 Support a current transaction, create a new one if none exists. 如果当前有事务则使用当前事务,否则创建新的事务。 NESTED(6); //嵌套 Execute within a nested transaction if a current transaction exists, behave like REQUIRED otherwise. 如果当前有事务,则在当前事务的嵌套事务中执行。否则,创建新的事务执行。 嵌套事务的特点: 内层事务的回滚,不会影响外层事务。 但是,外层事务的回滚,会影响内层事务。
最新回复(0)