我需要以异步方式发送电子邮件,同时将数据保存到数据库中。
我的方法是这样的。
//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的位置吗?
答案 0 :(得分:10)
EnableAsync
用于配置并启用Spring的异步方法执行功能,不应该放在Service
或Component
类上,它应放在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方法不被同一个类调用。代理的自我调用不起作用。