首先,数据库表中,存放以下内容:
1.定时任务ID
2.定时任务执行的时间(或是周期或者某一时间);
3.数据库连接URL\用户名\密码
4.执行的SQL
程序需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单.
问题是表中的内容会被修改、删除、添加的!
如何保证在对数据修改、删除、添加后不重启服务情况下,定时任务是按照更新后的数据执行的?
并且不影响已经在执行并没有修改的定时任务的进度?
比如表中有2组定时任务A组和B组程序已经开始执行。这时我对B组的运行周期或SQL
修改的时候不影响A组的运行情况并且最终B组是按照修改后的信息执行的!
请各位高手指点!急,急,急!
1.定时任务ID
2.定时任务执行的时间(或是周期或者某一时间);
3.数据库连接URL\用户名\密码
4.执行的SQL
程序需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单.
问题是表中的内容会被修改、删除、添加的!
如何保证在对数据修改、删除、添加后不重启服务情况下,定时任务是按照更新后的数据执行的?
并且不影响已经在执行并没有修改的定时任务的进度?
比如表中有2组定时任务A组和B组程序已经开始执行。这时我对B组的运行周期或SQL
修改的时候不影响A组的运行情况并且最终B组是按照修改后的信息执行的!
请各位高手指点!急,急,急!
注:这不是个完整的程序,只是大概实现逻辑,里面有些类和方法具体的使用自己再查些资料吧。
另外,还要注意List更新中的同步问题。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;public class TimerTask{
//定义一个静态变量的list,将任务列表填充进去
public static List taskList;
public static void main(String[] args) {
taskList = new ArrayList();
try{
//利用Timer类,实现定时执行任务
Timer timer = new Timer();
timer.schedule(new mytask(), startTime, intervalTime);
}catch(Exception e){
e.printStackTrace();
}
}
static class mytask extends TimerTask{
public void run(){
//每次任务执行前,更新任务列表
updateList();
//具体的处理逻辑
}
}
private static void updateList(){
//此方法通过读取数据库对taskList进行更新
}
}
首先,数据库表中,存放以下内容:
1.定时任务ID
2.定时任务执行的时间(或是周期或者某一时间);
3.数据库连接URL\用户名\密码
4.执行的SQL
程序需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单.
问题是表中的内容会被修改、删除、添加的!
如何保证在对数据修改、删除、添加后不重启服务情况下,定时任务是按照更新后的数据执行的?
并且不影响已经在执行并没有修改的定时任务的进度?
比如表中有2组定时任务A组和B组程序已经开始执行。这时我对B组的运行周期或SQL
修改的时候不影响A组的运行情况并且最终B组是按照修改后的信息执行的!
请各位高手指点!!
对于新增的记录,创建一个 TimerTask,将其放到一个列表中,并加入 Timer;
对于已经修改的记录,把相应的 TimerTask cancel 掉重新创建;
对于已经删除的记录,把相应的 TimerTask cancel 掉。Timer 之间不会相互影响。