是否可以动态添加列表或列表元素作为Spring属性?

时间:2016-03-29 14:57:58

标签: java spring quartz-scheduler

我正在使用Spring / Quartz调度作业。

我的SchedulerFactoryBean

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
            <ref bean="testJob1" />
            <ref bean="testJob2" />
        </list>
    </property>
    <property name="triggers">
        <list>
            <ref bean="testJob1Trigger" />
            <ref bean="testJob2Trigger" />
        </list>
    </property>
</bean>

我想安排的工作数量各不相同,所以我想将它们作为代码列表添加。

基本上我现在有testJob1testJob2个工作。

如何在不触及XML的情况下添加testJob3testJob4等?

是否可以动态定义作业和触发器列表?

我的意思是这样的:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
            <ref bean="anArrayListOfJobs" />
        </list>
    </property>
    <property name="triggers">
        <list>
            <ref bean="anArrayListOfTriggers" />
        </list>
    </property>
</bean>

1 个答案:

答案 0 :(得分:0)

您可以动态定义作业和触发器,并动态安排作业。

    // Create Job
    JobDetailFactoryBean JobDetail = new JobDetailFactoryBean();
    jobDetail.setJobClass(ScheduledJob.class);
    jobDetail.setName("reportJob1");
    jobDetail.setDurability(true);
    jobDetail.setJobDataMap(new JobDataMap());
    jobDetail.afterPropertiesSet();

    // create CRON Trigger
    CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
    trigger.setBeanName("UniqueCronBeanName");
    trigger.setGroup("uniqueCronGroup");
    trigger.setJobDetail(jobDetail.getObject());
    trigger.setCronExpression("0 0 12 * * ?");
    trigger.afterPropertiesSet();

然后,您可以通过将其设置为已定义的调度程序工厂来安排作业。

    schedulerFactoryBean.getScheduler().scheduleJob(jobDetail.getObject(), trigger.getObject());