我有一个Java程序,它读取文本文件并按顺序处理它们,并在每个文件完成时在单独的线程中触发邮件(使用runnable)。我已将此程序配置为crontab中的cron作业,每15分钟运行一次。
如果上次作业的子线程发送电子邮件的时间超过20分钟,则不会触发cron。如果最后一个子线程仍在执行,我怎样才能每15分钟触发一次该作业?
以下是使用的代码::
public class EpdFeedLoader {
public static void main(String[] args) throws Exception {
startProcess(feedFile);
}
public static void startProcess(BatchFeedFile feedFile) {
EpdBatchLoader epdBatchLoader = new EpdBatchLoader(feedFile);
epdBatchLoader.execute();
}
}
public class EpdBatchLoader {
private static void sendDelayedFeedEmail(){
SendDelayedFeedJobStatusMail delayedFeedEmail = new SendDelayedFeedJobStatusMail();
delayedFeedEmail.setParameters(//parameters for my email method);
Thread delayedFeedThread = new Thread(delayedFeedEmail);
delayedFeedThread.start();
}
}
public class SendDelayedFeedJobStatusMail implements Runnable {
private MailRequestDTO mailRequestDTO;
public void setParameters(MailRequestDTO mailRequestDTO){
this.mailRequestDTO = mailRequestDTO;
}
public void sendMail() {
boolean isSend = false;
message.setSubject(subject);
message.setSentDate(Utils.getDateInTimeZone(mailRequestDTO.getCountryCode(),new Date()));
message.setContent(mailRequestDTO.getMessageContent(), "text/html");
message.addHeader("Content-Transfer-Encoding", "7bit");
attachInlineImages(message, mailRequestDTO.getInlineImageMap());
ConfigUtils.logger.info("Ready to Send Delayed Feed Receipt Email for Process Code : " + mailRequestDTO.getProcessCode().toString());
Transport.send(message);
isSend = true;
ConfigUtils.logger.info("Delayed Feed Receipt Email Sent Successfully for Process Code : " + mailRequestDTO.getProcessCode().toString());
}
@Override
public void run(){
this.sendMail();
}
}