我需要使用Quartz来管理我的各种任务。
基于Quartz的程序写好部署运行后,在系统运转过程中,还会增加很多新的任务。
这些新增加的任务,怎样注册到正在运行的程序中?因为Quartz是通过JobBuilder.newJob(XXX.class),写到代码中的。
客户会随时增加需求,我就要根据客户的需求,写相应的Job程序,这些新写出来的Job程序,怎么注册到正在运行的程序中?
我的意思是,在程序运行中,新增加一个job。

解决方案 »

  1.   

    调用Scheduler.scheduleJob就可以啊
      

  2.   


    这个只是调度任务,但是问题的根源在于调度任务需要指定JOB的全类名,我是希望能调度按需求产生的job对象
      

  3.   


    是希望能调度按需求产生的job对象,指定全类名的话任务就要事先编程好了,应付不了需求。
      

  4.   

    Quartz可以传参数的,预先设计好一个job类,根据不同参数路由到具体要调用的服务,因为你说的是不需要重启,那肯定是有规则的,既然有规则就可以考虑从这个方面实现
    但你没有透露更多我也无法知道你们不需要重启就能新增新的功能的实现方式
      

  5.   


    是希望能调度按需求产生的job对象,指定全类名的话任务就要事先编程好了,应付不了需求。
    我具体的意思是,你需要新增job的时候把新开发jar包放在一个目录下,然后通过后门把jar包路径和类命传给jvm让他去动态加载这个新开发的jar包,然后通过传入的类名反射类注册到job里面去。
      

  6.   

    可不可以单独设计一个job定时扫描是否有新的job,然后动态将新的job添加进去
      

  7.   

    这要分享啥,quartz本就有动态添加的实现的,当然他是基于数据库的或者你自己写一个,基于zk之类,集群环境就好使多了
      

  8.   

    这个是没有spring的环境,如果有spring直接拿到factory,往里面加就可以了 
    修改的话,也是通过SchedulerFactory 拿到scheduler,然后再修改里面的trigger ,listener,jobdetail之类的
      

  9.   

    1.SchedulerFactory sf = new StdSchedulerFactory();   
    2.Scheduler scheduler = sf.getScheduler();   
    3.JobDetail jobDetail = new JobDetail("SchedulerJob","run_manage",SchedulerJob.class);   
    4.Trigger trigger = CronTrigger(String name, String group, String cronExpression) ;   
    5.scheduler.scheduleJob(jobDetail, trigger); 
      

  10.   

    定时扫描某个包,有新的需求上传class文件到这个包下,然后将这个class添加到定时任务里(或者你也可以用线程去做,一个新的class开一个新的线程,用sleep达到定时的效果)。
      

  11.   

    可以把你想要调用的job加一个锁,符合条件时解开
      

  12.   

    前段时间,我们项目也遇到了这个需求,因为我们项目用的是xxl-job,所以是重写了xxl-job的API,封装成接口供我们项目自己调用,完美解决运行时动态添加定时任务的需求
      

  13.   

    Scheduler sched = new StdSchedulerFactory().getScheduler();
                JobDetail jobDetail = new JobDetail("jobName", "JOB_GROUP_NAME", Job.class);// 任务名,任务组,任务执行类
                CronTrigger trigger = new CronTrigger("jobName", "JOB_GROUP_NAME");// 触发器名,触发器组
                trigger.setCronExpression("time");// 触发器时间设定
                sched.scheduleJob(jobDetail, trigger);
                // 启动
                if (!sched.isShutdown()) {
                    sched.start();
                }