Spring禁用单个类方法的事务

ale*_*oid 6 spring transactions spring-transactions

在我的Spring应用程序中,我有一个带有org.springframework.transaction.annotation.Transactional注释的类。

是否可以丢弃此类的特定单个方法的事务而无需@Transactional从类级别的声明中删除?如果是这样,请举一个例子

asc*_*erk 8

根据事务性文档:

public @interface Transactional

Describes a transaction attribute on an individual method or on a class.
Run Code Online (Sandbox Code Playgroud)

因此,除了类级注释外,只​​需在您的方法中定义正确的属性即可禁用默认事务处理。

例:

@Transactional(propagation=Propagation.NEVER)
public long notInTransaction(AnythingData anythingData) throws Exception {
   //JDBC code...
}
Run Code Online (Sandbox Code Playgroud)

如果在活动事务中调用此方法,将引发异常。而Propagation.NOT_SUPPORTED将“暂停”当前交易并确保该方法称为非交易。

  • 使用我的配置(Spring 4.3.10、EclipseLink 2.7.6),这不起作用。即,尽管在方法级别上有“@Transactional(propagation=Propagation.NEVER)”,但事务还是启动了。一旦我从类级别删除“@Transactional”,就不会创建任何事务。仅供参考,这应该不重要,但我正在使用指定的事务管理器和特定的回滚条件。 (2认同)