タイトルは基本的に私の問題を今のところまとめています。 Jobの複数のインスタンスが同時に実行されている場合、Javamailは同期的に使用されるため例外がスローされます。非同期で実行できる方法はありますか?あるいは、非同期のJavamailの代替手段がありますか?Javamailを使用して電子メールを送信するためのQuartzジョブが同期しています。
0
A
答えて
1
私は、タスクのような種類に対処する方法はいくつかあると思います。
- が、その後、定期的に電子メールのバッチを送信するサービスの中に包みます。
はそれぞれのメールをオンスレッドで送信します。つまり、別々のSMTP接続を意味します。
@Async public void sendEmail(String smtpServer, String to,String from,String subject, String body) { send(smtpServer, to, from, subject, body); }
2
私はクォーツのすべての時間でこの種のものを行います。あなたがする必要があるのは、別のスレッドをスピンオフすることだけです。どのように行うかは、環境に大きく依存します。あなたはAppサーバー上で実行しているのですか、単にバニラJavaを実行していますか?
スレッドをスピンオフするだけであれば、それに関する数多くのチュートリアルがあります。
Wildflyのようなアプリケーションサーバーで実行している場合は、セッションBeanで@Asynchronousタグを使用します。ちょっとした難点は、QuartzのスケジュールされたジョブにCDIできないため、JNDIを使用して必要なセッションBeanのコンテナプロキシを取得する必要があることです。このような何か:
@NoArgsConstructor
@ApplicationScoped
@Slf4j
public class YourJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException
{
String message = "";
try {
final InitialContext ctx = new InitialContext();
final IYourSessionBean yoruSessionBean = (IYourSessionBean) ctx.lookup("java:global/server-core/YourSessionBean!com.somecompany.interfaces.IYourSessionBean");
final JobKey key = context.getJobDetail().getKey();
final JobDataMap dataMap = context.getJobDetail().getJobDataMap();
String taskID = dataMap.getString(BjondQuartzService.TASKID);
String descr = dataMap.getString(BjondQuartzService.DESCRIPTION);
yourSessionBean.assignTaskAsync(taskID, descr);
context.setResult("SUCCESS");
} catch(Exception e) {
log.error("Could not assign task: {}", message, e);
context.setResult("FAILURE");
}
}
}
そして、受信側:
@Asynchronous
@TransactionAttribute(REQUIRED)
@Override
public void assignTaskAsync(@NotNull(message="taskID must not be null")
final String taskID,
@NotNull(message="descr must not be null")
final String descr
) throws Exception {
Do some stuff here.
}
注@Asychronousタグ。各コンテナには、プールから抽出可能な複数のスレッドがあり、このような非同期呼び出しに使用されます。 Runnableを直接扱うよりも簡単です。
関連する問題
- 1. JavaMailなしでJavaを使用して電子メールを送信
- 2. ClassCastException JavaMail APIを使用してservicemixで電子メールを送信する場合
- 3. 電子メールを非同期で送信して処理する
- 4. JavaMailを使用して仕事の電子メールサーバーにメールを送信
- 5. 電子メール通知を送信するためのSQLジョブ
- 6. JavaMail APIなしでJavaで電子メールを送信する
- 7. CDO - 電子メールを送信しても電子メールを送信すると
- 8. JavaでJavaMailを使用して電子メールをフォーマットする
- 9. JavaMail同じスレッド/会話で電子メールを送信
- 10. Android用JavaMail APIを使用してHTMLメールを送信する
- 11. JavaMailを使用してメールを送信する場合のjavax.net.ssl.SSLException
- 12. 電子メールを送信するemailnot送信emailnot送信emailnot送信emailnot送信emailnot送信しない電子メール を送信しない電子メール
- 13. Powershellは、別の電子メールとしてOutlookを使用して電子メールを送信します
- 14. Pythonを使用して電子メールを送信するのが難しい
- 15. Windowsサービスを使用して電子メールを送信する
- 16. レールでタイムスタンプを使用して電子メールを送信する
- 17. RoRアプリケーションを使用して電子メールを送信する
- 18. mailto:URLを使用して電子メールを送信する
- 19. Outlookを使用して電子メールを送信する
- 20. モバイルアプリケーションを使用して電子メールを送信する
- 21. SendGridを使用して電子メールを送信する方法
- 22. Yahoo SMTPを使用して電子メールを送信する
- 23. asp.netを使用して電子メールでデータを送信する
- 24. PHPを使用して電子メールを送信するフォーム
- 25. RMAILを使用して電子メールを送信する
- 26. C#でSystem.Net.Mailを使用して電子メールを送信する
- 27. Cを使用して電子メールを送信する
- 28. smtpでPythonを使用して電子メールを送信する
- 29. phpBitsTheaterを使用して電子メールを送信する
- 30. React Nativeを使用して電子メールを送信するiOS
私はこれらの解決策に感謝します。 – Edmond