功能需求:項目啟動時,后天起一個定時線程,每個小時跑一次,查出數據發郵件出來。
主要使用
- public void schedule(TimerTask task, long delay)
task被安排在delay(毫秒)指定的時間后執行。
- public void schedule(TimerTask task,long delay, long period)
? task被安排在delay(毫秒)指定的時間后執行。執行后將每隔period(毫秒)反復執行。
- ? public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)
? task被安排在firstTime指定的時間執行。執行后將每隔period(毫秒)反復執行。每一次重復的時間時盒第一次執行而不是和前一次執行有關。因此執行的總速度是固定的。
- ? public void scheduleAtFixedRate(TimerTask task,long delay,long period)
? task被安排在delay(毫秒)指定的時間后執行。執行后將每隔period(毫秒)反復執行。每一次重復的時間時盒第一次執行而不是和前一次執行有關。因此執行的總速度是固定的。
?
package com.odianyun.ad.service.alertMailJob;
import com.odianyun.ad.business.read.manage.AdSourceReadManage;
import com.odianyun.ad.business.utils.ConfigUtil;
import com.odianyun.ad.model.po.AdSourcePO;
import com.odianyun.hotword.business.read.manage.HotWordReadManage;
import com.odianyun.hotword.business.read.manage.impl.HotWordReadManageImpl;
import com.odianyun.search.whale.common.util.EmailUtil;
import com.odianyun.search.whale.common.util.NetUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import java.util.*;
public class ExpiredJob {
static Logger logger = Logger.getLogger(ExpiredJob.class);
@Autowired
AdSourceReadManage adSourceReadManage;
@Autowired
HotWordReadManage hotWordReadManage;
private static long sendIntervalMinus;
private static boolean isSendErrorMail;
private static String sendTo;
static {
ConfigUtil.loadPropertiesFile("mail.properties");
sendIntervalMinus = ConfigUtil.getLong("mail.sendIntervalMinus", 60);
isSendErrorMail = ConfigUtil.getBool("mail.isSendErrorMail", true);
sendTo = ConfigUtil.get("mail.msgTo");
}
public ExpiredJob() {
//現在構造函數里面,然后在spring bean的配置文件里增加這個bean,讓spring容器創建這個實例,也就達到了項目啟動時啟動線程的目的
//線程用于掃描24小時以內即將過期的廣告
//此線程啟動后開始執行,每一個小時執行一次
Timer timer = new Timer(false);
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try {
List<AdSourcePO> adlist = adSourceReadManage.getExpiredAdSource();
List<String> hotwordlist = hotWordReadManage.getExpiredHotWordIds();
if (CollectionUtils.isNotEmpty(adlist)) {
StringBuffer sb = new StringBuffer();
for(AdSourcePO adSourcePO : adlist){
sb.append("廣告名稱 : " + adSourcePO.getName() + " ,廣告位 : " +adSourcePO.getCodeName() +" </br>");
}
EmailUtil.sendMail("Below " + adlist.size() + " ads will be expired in 24 hours , send from " + NetUtil.getLocalIP(), sendTo, sb);
logger.info("Send ad " + adlist.toString() + " mail successfully");
} else {
logger.info("No ads will expired in 24 hours.");
}
if (CollectionUtils.isNotEmpty(hotwordlist)) {
EmailUtil.sendMail("Below " + hotwordlist.size() + " hot words will be expired in 24 hours , send from " + NetUtil.getLocalIP(), sendTo, hotwordlist);
logger.info("Send hot words " + hotwordlist.toString() + " mail successfully");
} else {
logger.info("No hot words will expired in 24 hours.");
}
} catch (Exception e) {
logger.error("Send ad expired mail exception", e);
}
}
}, 1000 * 60 * 1, 1000 * 60 * sendIntervalMinus);
}
;
}