gpt4 book ai didi

java - Spring @Transaction 方法被同一个类内的方法调用,不起作用?

转载 作者:IT老高 更新时间:2023-10-28 11:33:12 24 4
gpt4 key购买 nike

我是 Spring Transaction 的新手。我发现很奇怪的东西,可能我确实正确理解了这一点。

我想在方法级别有一个事务性,并且我在同一个类中有一个调用者方法,但它似乎不喜欢那样,它必须从单独的类中调用。我不明白这怎么可能。

如果有人知道如何解决此问题,我将不胜感激。我想使用同一个类来调用带注释的事务方法。

代码如下:

public class UserService {

@Transactional
public boolean addUser(String userName, String password) {
try {
// call DAO layer and adds to database.
} catch (Throwable e) {
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();

}
}

public boolean addUsers(List<User> users) {
for (User user : users) {
addUser(user.getUserName, user.getPassword);
}
}
}

最佳答案

这是 Spring AOP 的限制(动态对象和 cglib )。

如果您将 Spring 配置为使用 AspectJ要处理交易,您的代码将起作用。

简单且可能是最好的替代方法是重构您的代码。例如一个处理用户的类和一个处理每个用户的类。然后 default 使用 Spring AOP 处理事务。


使用 AspectJ 处理事务的配置提示

要让 Spring 使用 AspectJ 进行事务,您必须将模式设置为 AspectJ:

<tx:annotation-driven mode="aspectj"/>

如果您使用的 Spring 版本低于 3.0,则还必须将其添加到您的 Spring 配置中:

<bean class="org.springframework.transaction.aspectj
.AnnotationTransactionAspect" factory-method="aspectOf">
<property name="transactionManager" ref="transactionManager" />
</bean>

关于java - Spring @Transaction 方法被同一个类内的方法调用,不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3423972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com