我应该在哪里放置@EnableAsync注释

2022-09-03 04:40:58

我需要以异步方式发送电子邮件,同时将数据保存到数据库中。

我的做法是这样的。

//I have tried with service layer annotating.But not worked. 
@EnableAsync 
class MyService{
 public String saveMethod(List listOfData){
    mail.sendEmailQuote(listOfData);
    mail.sendEmailWorkflowTaskAssignment(listOfData);
    myDao.saveData(listOfData);
 }
}

我需要以@Async方式执行以下方法。我应该在哪里放置@EnableAsync注释。这不是与计划相关的事情。当用户单击保存按钮时,会发生这种情况。应用采用柔性弹簧火焰DS。没有我自己写的控制器。

我已经在我的代码中使用了@Async注释,用于以下2种方法。这些是在课堂上呼叫邮件。

@Async
sendEmailQuote(listOfData){}

@Async
sendEmailWorkflowTaskAssignment(listOfData){}

你能帮我找到我应该把@EnableAsync放在哪里吗?

我参考了这个示例


答案 1

EnableAsync用于配置并启用Spring的异步方法执行功能,它不应该放在你的或类上,它应该放在你的类上,就像:ServiceComponentConfiguration

@Configuration
@EnableAsync
public class AppConfig {

}

或者使用您喜欢的更多配置:AsyncExecutor

@Configuration
@EnableAsync
public class AppConfig implements AsyncConfigurer {

 @Override
 public Executor getAsyncExecutor() {
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
     executor.setCorePoolSize(7);
     executor.setMaxPoolSize(42);
     executor.setQueueCapacity(11);
     executor.setThreadNamePrefix("MyExecutor-");
     executor.initialize();
     return executor;
 }
 }

有关更多详细信息,请参阅它的java文档

对于您遵循的教程,放在类之上,该类具有AsyncExecutor配置:EnableAsyncApplicationextends AsyncConfigurerSupport

@SpringBootApplication
@EnableAsync
public class Application extends AsyncConfigurerSupport {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

@Override
public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(2);
    executor.setMaxPoolSize(2);
    executor.setQueueCapacity(500);
    executor.setThreadNamePrefix("GithubLookup-");
    executor.initialize();
    return executor;
}
}

答案 2

只需确保@Async方法不是由同一类调用的。代理的自调用将不起作用。


推荐