package com.mossle.internal.sendsms.scheduler; import java.util.Date; import java.util.List; import java.util.Properties; import javax.annotation.Resource; import com.mossle.core.mapper.BeanMapper; import com.mossle.internal.sendsms.persistence.domain.SendsmsConfig; import com.mossle.internal.sendsms.persistence.domain.SendsmsHistory; import com.mossle.internal.sendsms.persistence.domain.SendsmsQueue; import com.mossle.internal.sendsms.service.SendsmsDataService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component @Transactional public class SendSmsJob { private static Logger logger = LoggerFactory.getLogger(SendSmsJob.class); private SendsmsDataService sendsmsDataService; private int threshold = 20; private BeanMapper beanMapper = new BeanMapper(); private boolean running; // every 10 seconds @Scheduled(cron = "0/10 * * * * ?") public void execute() throws Exception { try { this.doExecute(); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } public synchronized void doExecute() throws Exception { if (running) { return; } running = true; logger.debug("send sms job start"); List<SendsmsQueue> sendsmsQueues = sendsmsDataService .findTopSendsmsQueues(threshold); logger.debug("sendsmsQueues : {}", sendsmsQueues.size()); for (SendsmsQueue sendsmsQueue : sendsmsQueues) { sendsmsDataService.processSendsmsQueue(sendsmsQueue); } logger.debug("send sms job end"); running = false; } @Resource public void setSendsmsDataService(SendsmsDataService sendsmsDataService) { this.sendsmsDataService = sendsmsDataService; } public void setThreshold(int threshold) { this.threshold = threshold; } }