2016-11-08 5 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와 같은 응용 프로그램 서버에서 실행중인 경우 세션 빈에서 @Asynchronous 태그를 사용하십시오. 유일한 까다로운 점은 Quartz 스케쥴 된 작업으로 CDI 할 수 없다는 것이다. JNDI를 사용하여 원하는 세션 빈에 대한 컨테이너 프록시를 가져와야한다. 이런 식으로 뭔가 :

@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을 직접 다루는 것보다 이것을 쉽게 발견한다.