Java 定时线程
功能需求:項目啟動時,后天起一個定時線程,每個小時跑一次,查出數(shù)據(jù)發(fā)郵件出來。
主要使用
- public void schedule(TimerTask task, long delay)
task被安排在delay(毫秒)指定的時間后執(zhí)行。
- public void schedule(TimerTask task,long delay, long period)
? task被安排在delay(毫秒)指定的時間后執(zhí)行。執(zhí)行后將每隔period(毫秒)反復(fù)執(zhí)行。
- ? public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)
? task被安排在firstTime指定的時間執(zhí)行。執(zhí)行后將每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的時間時盒第一次執(zhí)行而不是和前一次執(zhí)行有關(guān)。因此執(zhí)行的總速度是固定的。
- ? public void scheduleAtFixedRate(TimerTask task,long delay,long period)
? task被安排在delay(毫秒)指定的時間后執(zhí)行。執(zhí)行后將每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的時間時盒第一次執(zhí)行而不是和前一次執(zhí)行有關(guān)。因此執(zhí)行的總速度是固定的。
?
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() {
//現(xiàn)在構(gòu)造函數(shù)里面,然后在spring bean的配置文件里增加這個bean,讓spring容器創(chuàng)建這個實例,也就達到了項目啟動時啟動線程的目的
//線程用于掃描24小時以內(nèi)即將過期的廣告
//此線程啟動后開始執(zhí)行,每一個小時執(zhí)行一次
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);
}
;
}
轉(zhuǎn)載于:https://www.cnblogs.com/wonderlands/p/5455319.html
總結(jié)
- 上一篇: masm32环境配置
- 下一篇: win10微信多开