2016-11-08 12 views

答えて

1

私は、タスクのような種類に対処する方法はいくつかあると思います。

  1. が、その後、定期的に電子メールのバッチを送信するサービスの中に包みます。
  2. はそれぞれのメールをオンスレッドで送信します。つまり、別々のSMTP接続を意味します。

    @Async 
    public void sendEmail(String smtpServer, String to,String from,String subject, String body) { 
         send(smtpServer, to, from, subject, body); 
    } 
    
+0

私はこれらの解決策に感謝します。 – Edmond

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を直接扱うよりも簡単です。

関連する問題