⑴ java怎麼讓程序每天晚上12點做定時任務,因為程序是不定時開的,所以要實時監聽系統時間。
java定時任務,每天定時執行任務(JDK TimerTask)
標簽: taskTasktimerTimer
2013-01-14 13:28 8747人閱讀 評論(0) 收藏 舉報
01 public class TimerManager {
02
03 //時間間隔
04 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
05
06 public TimerManager() {
07 Calendar calendar = Calendar.getInstance();
08
09 /*** 定製每日2:00執行方法 ***/
10
11 calendar.set(Calendar.HOUR_OF_DAY, 2);
12 calendar.set(Calendar.MINUTE, 0);
13 calendar.set(Calendar.SECOND, 0);
14
15 Date date=calendar.getTime(); //第一次執行定時任務的時間
16
17 //如果第一次執行定時任務的時間 小於 當前的時間
18 //此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
19 if (date.before(new Date())) {
20 date = this.addDay(date, 1);
21 }
22
23 Timer timer = new Timer();
24
25 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
26 //安排指定的任務在指定的時間開始進行重復的固定延遲執行。
27 timer.schele(task,date,PERIOD_DAY);
28 }
29
30 // 增加或減少天數
31 public Date addDay(Date date, int num) {
32 Calendar startDT = Calendar.getInstance();
33 startDT.setTime(date);
34 startDT.add(Calendar.DAY_OF_MONTH, num);
35 return startDT.getTime();
36 }
37
38 }
在 TimerManager 這個類裡面,大家一定要注意 時間點的問題。如果你設定在凌晨2點執行任務。但你是在2點以後
發布的程序或是重啟過服務,那這樣的情況下,任務會立即執行,而不是等到第二天的凌晨2點執行。為了,避免這種情況
發生,只能判斷一下,如果發布或重啟服務的時間晚於定時執行任務的時間,就在此基礎上加一天。
01 public class NFDFlightDataTimerTask extends TimerTask {
02
03 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
04
05 @Override
06 public void run() {
07 try {
08 //在這里寫你要執行的內容
09
10 } catch (Exception e) {
11 log.info("-------------解析信息發生異常--------------");
12 }
13 }
14 }
15
16 public class NFDFlightDataTaskListener implements ServletContextListener {
17
18 public void contextInitialized(ServletContextEvent event) {
19 new TimerManager();
20 }
21
22 public void contextDestroyed(ServletContextEvent event) {
23 }
24
25 }
然後要在web.xml裡面配置監聽器
1 <listener>
2 <listener-class>
3 com.listener.NFDFlightDataTaskListener
4 </listener-class>
5 </listener>
⑵ 如何配置Spring定時器准確運行時間,例如我想它在每天半夜12點運行一次
Spring中有自帶任務調度框架Quartz ,直接在xml配置文件中配置就好。
一般我們使用spring定時器的時候都是配置的固定時間在spring配置文件中,如果我們有一個時間設置頁面,通過這個頁面設置定時器的執行時間,就可以達到動態執行的效果。
上代碼:
package com.test.action;
import java.text.ParseException;
import javax.annotation.Resource;
import org.quartz.Scheler;
import org.quartz.SchelerException;
import org.springframework.scheling.quartz.CronTriggerBean;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{ @Resourcepublic CronTriggerBean triggerBean;
//系統 public CronTriggerBean triggerTempBean;
@Resource private Scheler scheler;
private String configTime;
public String configTime(){ try { /*得到系統設置的定時器執行時間
*/System.out.println(triggerBean.getCronExpression());
/*得到指定定時器, testDoTrigger為applicationContext.xml中CronTriggerBean*/
triggerTempBean = (CronTriggerBean) scheler.getTrigger("testDoTrigger", Scheler.DEFAULT_GROUP);
/*指定定時器的執行時間*/
System.out.println(triggerTempBean.getCronExpression());
/*將指定定時器的執行時間設置為從前台傳遞過來的時間*/
triggerTempBean.setCronExpression(configTime);
/*讓設置生效*/
scheler.rescheleJob("testDoTrigger", Scheler.DEFAULT_GROUP,triggerTempBean);
} catch(ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(SchelerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
public String getConfigTime(){
return configTime;
}
public void setConfigTime(String configTime){
this.configTime = configTime;}
⑶ spring怎麼設置定時任務為每天凌晨2點執行和每小時執行一次
每天凌晨2點 0 0 2 * * ?和每天隔一小時 0 * */1 * * ?
⑷ java定時器 每天12點 固定執行一個方法
Calendar cal = Calendar.getInstance();
//每天定點執行
cal.set(Calendar.HOUR_OF_DAY,12);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
Timer timer = new Timer();
timer.schele(new TimerTask() {
public void run() {
//執行的內內容容
}
},cal.getTime(), 24*60*60*1000);
⑸ java定時器 每天凌晨 固定執行一個方法
可以通過以下方式實現,
public class TimerManager {
//時間間隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定製每日:00執行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次執行定時任務的時間
//如果第一次執行定時任務的時間 小於 當前的時間
//此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任務在指定的時間開始進行重復的固定延遲執行。
timer.schele(task,date,PERIOD_DAY);
}
// 增加或減少天數
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
//在這里寫你要執行的內容
} catch (Exception e) {
log.info("-------------解析信息發生異常--------------");
}
}
}
public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}
}
然後要在web.xml裡面配置監聽器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener>
⑹ JAVA單機版程序,如何指定在每天凌晨0:00:00執行
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class HandleTimerTask implements ServletContextListener {
private Timer timer = null; //定時器
private static int DOWNlOAD_HOUR = 0; //執行任務開始時間(時)
private static int DOWNlOAD_MINUTE = 0; //執行任務開始時間(分)
private static int DOWNlOAD_SECOND = 0; //執行任務開始時間(秒)
private long delay; //延時時間值(當前系統時間到下載時間之間的時間差毫秒數)
public void contextInitialized(ServletContextEvent event) {
init();//初始化參數
timer = new Timer(true);//創建Timer對象
//定時執行程序
timer.schele(new Handle(event.getServletContext()),delay,24*60*60*1000);//調用Handle()類(即每天要執行的任務),delay表示延遲毫秒數,0,24*60*60*1000表示每隔一天執行一次任務,60*60*1000表示一個小時;
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
/**
* 初始化參數
* @return
*/
public void init(){
//聲明一個Calendar對象
Calendar cal = Calendar.getInstance();
//設置時間
cal.set(Calendar.HOUR_OF_DAY, DOWNlOAD_HOUR);
cal.set(Calendar.MINUTE, DOWNlOAD_MINUTE);
cal.set(Calendar.SECOND, DOWNlOAD_SECOND);
Date date = new Date();
//獲取設定的時間
date = cal.getTime();
//聲明當前時間
Date now = new Date();
//獲取設定的時間和當前的時間差(毫秒數)
long interval = date.getTime() - now.getTime();
//如果當前時間大於下載時間,則將下載時間設置為下一個下載時間
if (interval < 0) {
cal.add(Calendar.DAY_OF_MONTH, 1);//將天數加1
date = cal.getTime();
//獲取設定的時間和當前的時間差(毫秒數)
interval = date.getTime() - now.getTime();
}
this.startTime = date;//初始化開始下載時間
this.delay = interval;//初始化當前時間到下載時間之間的時間差
}
}
public class Handle extends TimerTask {
private ServletContext context = null;
Timer timer = null; //查詢任務定時器
public Handle(ServletContext context)
{
this.context = context;
}
/**
* 開始執行
*/
public void run() {
//開始執行
context.log("開始執行!");
}
}
用延遲時間可以實現,添加了一個init()方法用來計算延時數,不管什麼時候啟動服務,都可以根據當前系統時間和執行任務的開始時間計算出延時時間毫秒數。
雖然沒有分,還是希望能幫助你。 ^_^
⑺ java如何在每一天的凌晨00:00:00自動運行程序
LZ指的是定時任務吧
在java裡面做定時任務通常是線程的
下面有個簡單的定時任務(沒驗證是否好使 但基本是這個樣子的)
在web.xml裡面增加一個監聽
<listener>
<listener-class>CountListen</listener-class>
</listener>
具體代碼如下
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import java.util.*;
public class CountListen
implements ServletContextListener {
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定時器已啟動");
System.out.println("定時器已啟動");
Date date = new Date(1900,1,1,23,59);
timer.schele(new SampleTask(event.getServletContext()),0,
24 * 60 * 60 * 1000);
event.getServletContext().log("已經添加任務調度表");
System.out.println("已經添加任務調度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定時器銷毀");
}
}
import java.util.*;
import javax.servlet.ServletContext;
import com.founder.gongan.util.ConfigPropertie;
import com.founder.gongan.manage.CountManager;
import com.founder.botong.entity.EnumFolder;
class SampleTask
extends TimerTask {
private static boolean isRunning = true;
private ServletContext context = null;
public SampleTask(ServletContext context) {
this.context = context;
}
public void run() {
if (isRunning) {
isRunning = false;
context.log("開始執行指定任務");
System.out.println("開始執行指定任務");
//指定的任務......
isRunning = true;
context.log("指定任務執行結束");
System.out.println("指定任務執行結束");
}else {
context.log("上一次任務執行還未結束");
}
}
}
⑻ java定時器每天晚上23:00開始刷新數據怎麼寫
publicstaticvoidtimer4(){
Calendarcalendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,23);//控制時
calendar.set(Calendar.MINUTE,0);//控制分
calendar.set(Calendar.SECOND,0);//控制秒
Datetime=calendar.getTime();//得出執行任務的時間,此處為今天的23:00:00
Timertimer=newTimer();
timer.scheleAtFixedRate(newTimerTask(){
publicvoidrun(){
System.out.println("-------設定要指定任務--------");
}
},time,1000*60*60*24);//這里設定將延時每天固定執行
}
⑼ java定時任務的定時表達式,每天早晨6:30執行任務,還有一個是每個月的1號和15號執行任務
public class TestTimerTask extends TimerTask{
public void run() {
Calendar cal = Calendar.getInstance();
//每月5號執行
if(cal.get(Calendar.DATE) == 5){
try {
//需要執行的代碼
} catch (Exception e) {
//logger.error(e);
e.printStackTrace();
}
System.gc();
//......
}
//周日執行
if(cal.get(Calendar.DAY_OF_WEEK) == 1){
try {
//需要執行的代碼
} catch (Exception e) {
// logger.error(e);
e.printStackTrace();
}
System.gc();
}
}
}
public class Test{
public static void main (String[] ages){
Timer timer = new Timer();//定時器
TestTimerTask ts = newTestTimerTask();//定時任務目標
Date firstTime = new Date();//第一次執行時間
long period = 1000 * 60 * 60 * 24;//執行間隔1天
timer.scheleAtFixedRate(ts, firstTime, period);//設置執行參數並且開始定時任務
}
}
⑽ java如何在每個月最後一天的凌晨00:00:00自動運行程序
可以寫個定時器。設置定時一天的時間,再通過代碼時間判斷是不是月末,如果是執行程序。