每月初執行一段程式碼
阿新 • • 發佈:2019-02-20
每個月月初的時候需要執行一段程式碼,在網上看到最好直接用quartz,但覺得還是需要導包,嫌麻煩。和朋友研究了一下最後又這個這種寫法。
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import kkd.common.util.DateUtil;
import com.interiorwages.entity.InteriorWagesChangeInfo;
import com.useradminservice.service.InteriorWagesChangeInfoService;
import com.useradminservice.service.impl.InteriorWagesChangeInfoServiceImpl;
public class timerTaskTest extends TimerTask {
ApplicationContextUtil.getApplicationContext();
private static Timer timer = new Timer();
private static Object obj = new Object();
@Override
public void run () {
synchronized(obj){
System.out.println(timer);
if(timer != null){
timer.cancel();
}
System.out.println("timer執行了");
timer = new Timer();
timerTaskTest test = new timerTaskTest();
timer.schedule(test, test.getNextDate());
}
}
public long getNextDate(){
//獲取當前時間
Date date = new Date();
//獲取當月最後一天的23:59:59
Date lastDate = DateUtil.getEndDateTimeOfMonth(date);
long lDate = date.getTime();
long lLastDate = lastDate.getTime();
//獲取兩個時間相減的毫秒值。
long interval = lLastDate-lDate;
System.out.println(interval);
//給每次執行的間隔時間+5秒。確保能到下個月。
interval += 5000;
System.out.println(interval);
return interval;
}
public static void main(String[] args){
timerTaskTest test = new timerTaskTest();
Date date = new Date();
date = DateUtil.addSeconds(date, 3);
timer.schedule(test, date);
}
}