java使用Timer定时器在指定时间执行程序
下面是一个利用Timer定时器在每天指定时间执行批处理程序的例子。
有关 java.util.Timer 详细知识请参考API。
值得注意的一点是Timer是单线程顺序执行多个任务的。
package com.dylan;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* 自定备份
*
* @author xusucheng
* @create 2018-03-05
**/
public class auto_backup {
public static void main(String[] args) {
backup();
}
// 每天11:30执行数据库备份任务
public static void backup() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); // 控制时
calendar.set(Calendar.MINUTE, 30); // 控制分
calendar.set(Calendar.SECOND, 0); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的11:30:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
execBat("D:\\script\\backup.bat"); //换成你的程序
}
}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
}
//执行bat文件
public static void execBat(String path) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Runtime rt = Runtime.getRuntime();
Process ps = null;
try {
ps = rt.exec(path);
ps.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
int result = ps.exitValue();
if (result == 0) {
System.out.println("执行完毕--" + sdf.format(new Date()));
} else {
System.out.println("执行失败--" + sdf.format(new Date()));
}
ps.destroy();
ps = null;
}
}