首先,数据库表中,存放以下内容: 
1.定时任务ID 
2.定时任务执行的时间(或是周期或者某一时间); 
3.数据库连接URL\用户名\密码 
4.执行的SQL 
程序需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单. 
问题是表中的内容会被修改、删除、添加的! 
如何保证在对数据修改、删除、添加后不重启服务情况下,定时任务是按照更新后的数据执行的? 
并且不影响已经在执行并没有修改的定时任务的进度?  
比如表中有2组定时任务A组和B组程序已经开始执行。这时我对B组的运行周期或SQL 
修改的时候不影响A组的运行情况并且最终B组是按照修改后的信息执行的! 
请各位高手指点!急,急,急! 

解决方案 »

  1.   

    比较是肯定的,可如何比较,把内容放如BEAN 定时检查数据的变化...一个一个的比较BEAN里的属性值么? 应该有更便利的比较法吧!请各位指教  
      

  2.   

    真巧,前段时间刚写过一个类似的程序,把实现原理跟你分享下^_^主要使用Java中java.util.Timer实现,部分代码如下:
    注:这不是个完整的程序,只是大概实现逻辑,里面有些类和方法具体的使用自己再查些资料吧。
    另外,还要注意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进行更新
    }
    }

      

  3.   

    晕倒,类名随便改了一个,竟改成了TimerTask……不好意思,不能用这个,应该用个其他的类名,呵呵,忙中出错啊
      

  4.   

    用Timer类定时就可以了啊,并且多线程操作
      

  5.   

    问题补充: 
    首先,数据库表中,存放以下内容: 
    1.定时任务ID 
    2.定时任务执行的时间(或是周期或者某一时间); 
    3.数据库连接URL\用户名\密码 
    4.执行的SQL 
    程序需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单. 
    问题是表中的内容会被修改、删除、添加的! 
    如何保证在对数据修改、删除、添加后不重启服务情况下,定时任务是按照更新后的数据执行的? 
    并且不影响已经在执行并没有修改的定时任务的进度?  
    比如表中有2组定时任务A组和B组程序已经开始执行。这时我对B组的运行周期或SQL 
    修改的时候不影响A组的运行情况并且最终B组是按照修改后的信息执行的! 
    请各位高手指点!! 
      

  6.   

    1、用一个类来缓存定时任务表中的内容,并启用一个线程定时刷新。2、启用一个 Timer。2、每次刷新完成后,对缓存的每一条记录进行检查:
    对于新增的记录,创建一个 TimerTask,将其放到一个列表中,并加入 Timer;
    对于已经修改的记录,把相应的 TimerTask cancel 掉重新创建;
    对于已经删除的记录,把相应的 TimerTask cancel 掉。Timer 之间不会相互影响。