@Transactional 方法使用 @Transactional 注解调用另一个方法?

问题描述 投票:0回答:1

我在同一个类中有两种不同的方法。我收到 SonarLint 错误
“不应通过“this”调用带有 Spring 代理的方法。

这两个方法都标有

@Transaction
注释。尽管我做了注释'
@Transactional(propagation = Propagation.REQUIRES_NEW)
',但它并没有解决SonarLint错误。我无法将方法移动到另一个类。我该怎么办?

@Transactional
    public void processEmails(SearchFilter searchFilter, ExchangeService exchangeService) throws Exception
    {
        Folder inbox = Folder.bind(exchangeService, WellKnownFolderName.Inbox);
....
....
...

 @Transactional
    public void readAndProcessProposalApprovalMails() throws Exception
    {
        try (ExchangeService exchangeService = new MicrosoftExchangeDomainServiceImpl(exchangeUsername, encryptionService.decryptWithGCMAlgorithm(exchangePassword), exchangeServiceUrl, exchangeServiceTimeout, exchangeDomain))
        {
            SearchFilter searchFilter = microsoftExchangeService.getSearchFilter(false, null, approvalSubjectPrefix, null);
            processEmails(searchFilter, exchangeService);
        }
    }
java spring-boot sonarlint
1个回答
0
投票

要解决 SonarLint 错误,您可以使用以下两种解决方案之一:

  1. 重构为单独的类:(推荐

Spring 使用代理来管理事务边界。当使用“this”调用同一类中的方法时,事务注释将被忽略,因为它绕过代理。

  1. 使用AopContext:(不推荐

AopContext.currentProxy():此方法将为您提供 bean 的当前 Spring AOP 代理,您可以使用它来调用带有事务注释的方法。

© www.soinside.com 2019 - 2024. All rights reserved.