java定时任务及对任务监视的实现

来源:互联网 发布:rm恢复删除文件 mac 编辑:程序博客网 时间:2024/05/18 06:19

需求:最近项目中要求实现这样的功能:系统运行时有两个任务;它们各自执行的操作不同,执行的开始时间和周期也不同;
执行的开始时间和周期要求可以动态配置。如:任务一今天可以是 6点运行,周期为每2个小时启动,也可能过一些天后任务一
改为8点运行,周期为每1小时一次;任务二也有同样的需求;而且在这些改变的过程中程序要求自己判断这些参数是否改变,
如果改变,则马上按新的要求运行任务;此过程中不允许系统重起。

思路:分别建立三个时钟,也就是三个任务。任务三是时刻(每10sec扫描一次)监视配置参数是否改变,如果改变的话,则判断
新的配置种所修改的启动时间是否在今天是否已经过去,如果时间已经过去则默认为任务从明天开始执行,同时把先前的任务停止,
同时启动新的计划任务。

实现:
private  Timer timer1;
private  Timer timer2;
private  Timer timer3;
private Task1 task1=null;
private Task2 task2=null;

public void task1Start(){
 System.out.println("开始启动定时任务1.........");
    task1=new Task1();
    timer1.schedule(task1,开始时间,周期)
 System.out.println("启动定时任务1完毕!");
 System.out.println();
}

public void task2Start(){
 System.out.println("开始启动定时任务2.........");
    task2=new Task2();
    timer2.schedule(task2,开始时间,周期)
 System.out.println("启动定时任务2完毕!");
 System.out.println();
}
public void task1Stop(){
 System.out.println("开始停止任务1........");
 task2.cancel();
    System.out.println("任务1已经停止!");
}
public void task2Stop(){
 System.out.println("开始停止任务2........");
 task2.cancel();
    System.out.println("任务2已经停止!");
 
}
public void task3Start(){
 System.out.println("开始启动监视任务.........");
 timer3.schedule(new ConfigCheckTask(),0,10 * 1000);
 System.out.println("启动监视完毕!");
 System.out.println();
}

class Task1 extends TimerTask {
 public void run() {
  //具体任务
 }
}
class Task1 extends TimerTask {
 public void run() {
  //具体任务
 }
}

class ConfigCheckTask extends TimerTask {
 public void run() {
  checkConfigParameter();
 }
}

private void checkConfigParameter(){
 FileReader fr;
 try {
  fr = new FileReader(getThisClassDirectory()+"jobconf.txt");
  //建立BufferedReader对象,并实例化为br   
  BufferedReader br=new BufferedReader(fr);
  //从文件读取一行字符串
  String line=br.readLine();
  boolean task1IsChange=false;
  boolean task2IsChange=false;
  while(line!=null){
   line=line.trim();
   int pos=line.indexOf("=");
       //读取配置,然后比较是否改变,处理task1IsChange和task2IsChange的状态
      task1IsChange=true;
      task2IsChange=true;
   line=br.readLine();
  }
  br.close();//关闭BufferedReader对象
  fr.close();//关闭文件
 
  
  if(task1IsChange){
   task1Stop();
   task1Start();
  }
  if(task2IsChange){
   task2Stop();
   task2Start();
  }
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 }catch (IOException e) {
  e.printStackTrace();
 }

}

原创粉丝点击