我在同一个类中有两种不同的方法。我收到 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);
}
}
要解决 SonarLint 错误,您可以使用以下两种解决方案之一:
Spring 使用代理来管理事务边界。当使用“this”调用同一类中的方法时,事务注释将被忽略,因为它绕过代理。
AopContext.currentProxy():此方法将为您提供 bean 的当前 Spring AOP 代理,您可以使用它来调用带有事务注释的方法。