【发布时间】:2018-05-07 20:26:50
【问题描述】:
在我的 Spring 应用程序中,我有一个使用org.springframework.transaction.annotation.Transactional 注释的类。
是否可以在不从类级别声明中删除@Transactional 的情况下丢弃此类特定单个方法的事务?如果有,请举例说明
【问题讨论】:
标签: spring transactions spring-transactions
在我的 Spring 应用程序中,我有一个使用org.springframework.transaction.annotation.Transactional 注释的类。
是否可以在不从类级别声明中删除@Transactional 的情况下丢弃此类特定单个方法的事务?如果有,请举例说明
【问题讨论】:
标签: spring transactions spring-transactions
根据Transactional 文档:
public @interface Transactional
Describes a transaction attribute on an individual method or on a class.
所以除了类级别注释之外,只需在您的方法中定义正确的属性以禁用默认事务处理。
示例:
@Transactional(propagation=Propagation.NEVER)
public long notInTransaction(AnythingData anythingData) throws Exception {
//JDBC code...
}
如果在活动事务中调用此方法将引发异常。而Propagation.NOT_SUPPORTED 将“暂停”当前事务并确保该方法被称为非事务性方法。
【讨论】:
@Transactional(propagation=Propagation.NEVER),但仍会启动事务。一旦我从类级别删除@Transactional,就不会创建任何事务。仅供参考,没关系,但我使用的是命名事务管理器和特定的回滚条件。