现在有如下问题,希望大虾帮忙解决下:
做的一个web项目,采用的是ssh2开发的,前台可以让用户设置时间,当时间到了之后便可以调用对应的一个action,用spring的任务调度,但是都是一个已设定好的时间,我想让用户自己去设定时间,而且当服务器重启了之后也可以执行,不知道各位有什么很好的例子没?

解决方案 »

  1.   

    spring里的quartz其实可能通过重启quartz设置新任务,例:public class TransmitTaskTrigger {
    private static final Logger logger = Logger.getLogger(TransmitTaskTrigger.class);

    private Scheduler sched = null;
    private TransmitTaskManager factory = null;


    /**
     * 定时器,每天几点几分执行任务。<br/>
     * <b>此方法会重置触发器.</b>
     * @param hour 小时(0-23)
     * @param minute 分钟(0-59)
     * @throws SchedulerException
     */  
    public void timer(int hour, int minute) throws SchedulerException{
    reset();

    Trigger trigger = TriggerUtils.makeDailyTrigger("transmitTrig", hour, minute);
    JobDetail jobDet = new JobDetail("transmitJob", TransmitTaskJob.class);
    //替掉下面这行,设置自已的任务
    jobDet.getJobDataMap().put(TransmitTaskJob.FACTORY, factory); sched.scheduleJob(jobDet, trigger);
    }

    /**
     * 重置<br/>
     * 关掉旧的,创建并开启新的。
     * @throws SchedulerException
     */
    private void reset() throws SchedulerException{
    logger.debug("reset()");

    shutdown();//关掉旧的

    create();
    start();//创建并开启新的.
    }

    private void create() throws SchedulerException{
    logger.debug("create()");
    SchedulerFactory sf = new StdSchedulerFactory();
    this.sched = sf.getScheduler();
    }

    private void start() throws SchedulerException{
    if(null != this.sched && !this.sched.isStarted()){
    logger.debug("start()");
    this.sched.start();
    }
    }

    /**
     * 关闭
     * @throws SchedulerException
     */
    public void shutdown() throws SchedulerException{
    if(null != this.sched && this.sched.isStarted()){
    logger.debug("shutdown()");
    this.sched.shutdown();
    }
    }

    public void setTransmitTaskFactory(TransmitTaskManager factory){
    this.factory = factory;
    }
    }
      

  2.   

    但是如果用户多的话,那前面那个用户所设置的那个时间如果还没到,不是被覆盖了吗?必需要存到数据库的,但是我不想每秒都去读数据库,我想数据库中的时间一到就调用对应的action!
      

  3.   

    设定一个默认时间 ,然后用户自己设定的时间存cookie里  取cookie有就使用cookie里时间  没有使用默认时间   不知可行否
      

  4.   

    具体代码我就不写了,说下思路,能帮上忙最好不过。
    你在jsp页面写段js,当用户点击按钮时调用函数开始计时,时间到则发送ajax请求,这全在客户端,服务器重启也没关系的。如果服务器关了,你也可以根据返回情况,重新发送或是让用户做决定