package com.mossle.internal.sendmail.scheduler;
import java.util.List;
import javax.annotation.Resource;
import com.mossle.api.tenant.TenantConnector;
import com.mossle.api.tenant.TenantDTO;
import com.mossle.core.mail.MailHelper;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.internal.sendmail.persistence.domain.SendmailQueue;
import com.mossle.internal.sendmail.service.SendmailDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
@Transactional
public class SendMailJob {
private static Logger logger = LoggerFactory.getLogger(SendMailJob.class);
private SendmailDataService sendmailDataService;
private int threshold = 20;
private BeanMapper beanMapper = new BeanMapper();
private MailHelper mailHelper;
private boolean running;
private boolean enabled = true;
private TenantConnector tenantConnector;
// every 10 seconds
@Scheduled(cron = "0/10 * * * * ?")
public void execute() {
if (!enabled) {
return;
}
try {
for (TenantDTO tenantDto : tenantConnector.findAll()) {
this.doExecute(tenantDto.getId());
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
public synchronized void doExecute(String tenantId) throws Exception {
if (running) {
return;
}
running = true;
logger.debug("send mail job start");
List<SendmailQueue> sendmailQueues = sendmailDataService
.findTopSendmailQueues(threshold, tenantId);
logger.debug("sendmailQueues : {}", sendmailQueues.size());
for (SendmailQueue sendmailQueue : sendmailQueues) {
sendmailDataService.processSendmailQueue(sendmailQueue);
}
logger.debug("send mail job end");
running = false;
}
@Resource
public void setSendmailDataService(SendmailDataService sendmailDataService) {
this.sendmailDataService = sendmailDataService;
}
@Resource
public void setMailHelper(MailHelper mailHelper) {
this.mailHelper = mailHelper;
}
public void setThreshold(int threshold) {
this.threshold = threshold;
}
@Value("${mail.enabled}")
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Resource
public void setTenantConnector(TenantConnector tenantConnector) {
this.tenantConnector = tenantConnector;
}
}