java使用Timer定時器在指定時間執行程序

下面是一個利用Timer定時器在天天指定時間執行批處理程序的例子。java

有關 java.util.Timer 詳細知識請參考API。數據庫

值得注意的一點是Timer是單線程順序執行多個任務的。spa


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;
    }
}