2017-04-06 52 views
1

我需要以异步方式发送电子邮件,同时将数据保存到数据库中。我应该在哪里放置@EnableAsync注释

我的方法是这样的。

//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种方法。那些在课堂上调用Mail。

@Async 
sendEmailQuote(listOfData){} 

@Async 
sendEmailWorkflowTaskAssignment(listOfData){} 

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

I refer this sample

回答

2

EnableAsync用于配置并启用Spring的异步方法执行能力,它不应该在你的ServiceComponent类的说,应该把你的Configuration类,如:

@Configuration 
@EnableAsync 
public class AppConfig { 

} 

或者更多配置你的AsyncExecutor这样的:

@Configuration 

@EnableAsync 公共类的AppConfig实现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; 
} 
} 
+0

我尝试了AppConfig类,但仍然无法正常工作 – Sanka

+0

如果您按照https://spring.io/guides/gs/async-method/的步骤操作,它将起作用。正确的配置是:1.“@ Service”位于你的“MyService”类之上; 2.'@ Async'超出了你的'MyService'中的方法,3.'@ EnableAsync',也有'@ SpringBootApplication'在你的'Application'类之上。或者,您可以请发布您已经尝试过的所有代码吗? – shizhz

1

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