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

时间:2017-04-06 02:25:56

标签: 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);
 }
}

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

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

@Async
sendEmailQuote(listOfData){}

@Async
sendEmailWorkflowTaskAssignment(listOfData){}

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

I refer this sample

2 个答案:

答案 0 :(得分:10)

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

@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;
 }
 }

有关详细信息,请参阅it's 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;
}
}

答案 1 :(得分:5)

确保@Async方法不被同一个类调用。代理的自我调用不起作用。