怎么动态给targetMethod传参数?

千纸鹤 发布于 2013/11/14 15:30
阅读 1K+
收藏 0

有如下代码:

 <!-- =======================================================================
                        Job 定义
    =========================================================================-->

    <bean id="subsidyJob"	class="com.payplat.dacq.scheduling.job.SubsidySchemeJob" />

    <!-- =======================================================================
                        JobDetail 定义
    =========================================================================-->
    <bean id="subsidyJobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="subsidyJob" />
        <property name="targetMethod" value="execute" />
        <property name="concurrent" value="false" />
        <!-- <property name="arguments" value="argsValue"/>-->
    </bean>

    <!-- =======================================================================
                        Trigger 定义  (由方法动态生成)
    =========================================================================-->

    <!-- =======================================================================
        配置调度器,容器启动就会执行调度程序;如果lazy-init='false',则容器启动时就会执行调度程序;
        如果lazy-init='true',则需要实例化该bean才能执行调度程序
    =========================================================================-->
    <bean id="subsidyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
    </bean>


 <!-- <property name="arguments" value="argsValue"/>-->
去掉上面的注释,如果我的exceute方法带了参数,如下:


SubsidySchemeJob.java


public class SubsidySchemeJob  {

    public void execute(String args) {
       System.out.println("方案开始执行"+args);
    }
}

程序运行后会打印:方案执行argsValue

从这里可以看出,可以传参给任务,现在我想在如下daima

SubsidyCronTrigger.java


@Service("SubsidyCronTrigger")
public class SubsidyCronTrigger {

    @Autowired() @Qualifier("subsidyScheduler")
    Scheduler scheduler;

    @Autowired() @Qualifier("subsidyJobDetail")
    JobDetail jobDetail;

    /**
     * 添加计划
     * @param triggerName
     * @param cronExpression
     * @throws SchedulerException
     * @throws ParseException
     */
    public void createScheduleJob(String triggerName,String[] cronExpression) throws SchedulerException, ParseException {

        for(int i = 0 ;i<cronExpression.length;i++){
            CronTrigger cronTrigger = new CronTrigger(triggerName,"group"+i);
            try {
                // setup CronExpression
                CronExpression cexp = new CronExpression(cronExpression[i]);
                // Assign the CronExpression to CronTrigger
                cronTrigger.setCronExpression(cexp);
            } catch (Exception e) {
                e.printStackTrace();
            }
            jobDetail.setName("detail"+i);
            scheduler.scheduleJob(jobDetail,cronTrigger);
        }
        scheduler.start();
    }
}
//现在我想在动态生成trigger的时候把i(相当于一个flag)传给job里的execute,该怎么写呢?

test.java

    @Test
    public void subsidyTest(){

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-energydata.xml");

        SubsidyCronTrigger ss = (SubsidyCronTrigger)context.getBean("SubsidyCronTrigger");

        try {
            ss.createScheduleJob("test1", new String[]{"*/1 * * * * ?","*/3 * * * * ?"});
        } catch (SchedulerException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }







加载中
返回顶部
顶部