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

San*_*nka 5 java spring asynchronous blazeds

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

我的方法是这样的.

//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);
 }
}
Run Code Online (Sandbox Code Playgroud)

我需要以@Async方式执行以下方法.我应该在哪里放置@EnableAsync注释.这不是与时间表相关的事情.用户单击"保存"按钮时会发生这种情况 应用是使用flex spring blazeDS.没有我自己写的控制器.

我在代码中使用了@Async注释来跟踪2个方法.那些是在课堂电话邮件.

@Async
sendEmailQuote(listOfData){}

@Async
sendEmailWorkflowTaskAssignment(listOfData){}
Run Code Online (Sandbox Code Playgroud)

你能帮我找一下@EnableAsync的位置吗?

我参考这个样本

shi*_*zhz 10

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

@Configuration
@EnableAsync
public class AppConfig {

}
Run Code Online (Sandbox Code Playgroud)

或者使用更多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;
 }
 }
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅它的java doc.

对于您所遵循的教程,EnableAsync将其放在上面Application,extends AsyncConfigurerSupport使用AsyncExecutor配置:

@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;
}
}
Run Code Online (Sandbox Code Playgroud)


小智 9

只要确保@Async方法没有被同一个类调用即可。代理的自我调用将不起作用。