データをDBに保存しながら、非同期でメールを送信する必要があります。
私のアプローチはこのようなものでした。
//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を使用。私が書いたコントローラはありません。
私のコードでは、次の2つの方法で@Asyncアノテーションを使用しています。それらはクラスMailにあります。
@Async
sendEmailQuote(listOfData){}
@Async
sendEmailWorkflowTaskAssignment(listOfData){}
@EnableAsyncをどこに置くべきかを見つけるのを手伝ってくれませんか?
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
クラスの上に置かれ、AsyncExecutor構成でextends 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;
}
}
@Asyncメソッドが同じクラスによって呼び出されないことを確認してください。プロキシの自己呼び出しは機能しません。