0 0

怎么动态给targetMethod传参数?5

<!-- =======================================================================

                       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

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

//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
    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();
        }
    }
2013年11月14日 15:53

2个答案 按时间排序 按投票排序

0 0

想多问一下,怎么样传递多个参数呢?看代码里面arguments是个数组,不知道xml配置文件中该怎么写才能传递多个参数。谢谢

2016年1月21日 18:34
0 0

设置参数使用 org.quartz.JobDetail.setJobDataMap(JobDataMap jobDataMap) 方法可以为job设置参数.

execute 方法是获取参数

public class KettleQuartzJob implements org.quartz.Job {
	
	
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		JobDataMap dataMap = context.getJobDetail().getJobDataMap();
		String type = dataMap.getString("type");
		//...其他代码
	}

}

2013年11月18日 17:30

相关推荐

    Emit实现动态代理

    我们需要在这里编写IL代码,以实现方法的入口、参数验证、调用委托以及返回结果。 5. **完成类型**:使用`TypeBuilder.CreateType()`方法,将动态类型实例化。至此,我们已经创建了一个新的类型,这个类型具备了...

    CGlib动态代理的好例子!

    CGlib,全称为Code Generation Library,是Java编程语言中的一个代码生成库,广泛应用于动态代理、性能监控以及AOP(面向切面编程)等领域。它是一个强大的、高性能的代码生成库,可以在运行期扩展Java类与实现Java...

    Spring动态定时器

    ### Spring动态定时器详解 #### 一、动态定时任务概念 动态定时任务,是指由用户或系统根据实际需求动态设定的定时任务。这类任务的触发时间并非固定不变,而是可以根据实时情况灵活调整。传统上,配置定时任务...

    java动态代理+自定义注解,实现改变目标方法行为(不入侵方法本身)

    java动态代理+自定义注解,实现改变目标方法行为(不入侵方法本身),支持自定义注解配置目标方法的前置、后置方法。实现效果如下:@MethodPreWrapper(clazz = MethodWrapper.class, methodName = "preMethod")@...

    java动态代理(JDK和cglib)共10页.pdf.zip

    - `invoke()`方法是核心,它接收三个参数:代理对象、被调用的方法和方法的参数。开发者可以在这个方法中实现自定义的逻辑,比如日志记录、事务管理等。 - 在`invoke()`方法中,通常会调用原始目标对象的相应方法...

    spring设置动态定时任务

    &lt;property name="targetMethod" value="simpleJobTest"/&gt; ``` 这里的 `schedulerJobDetail` 定义了一个 JobDetail,指定了目标对象 `scheduleInfoAction` 及其执行的方法 `simpleJobTest()`。`concurrent` 属性...

    Spring普通定时任务和动态设置定时任务

    ### Spring 普通定时任务与动态设置定时任务详解 #### 一、Spring 定时任务简介 在软件开发过程中,经常会遇到需要周期性执行的任务,例如数据备份、定时发送邮件等。对于这类需求,Spring 提供了一种简单且灵活的...

    spring设置动态定时任务.pdf

    当我们需要动态设置定时任务,即任务的执行间隔可以根据用户需求或外部条件进行调整时,Spring与Quartz的集成提供了解决方案。 1. **Quartz与Spring的集成** Spring通过`SchedulerFactoryBean`来集成Quartz,创建...

    spring设置动态定时任务.doc

    本文将详细介绍如何在Spring中设置动态定时任务,特别关注如何动态设置`cronExpression`。 首先,我们需要了解Quartz在Spring中的基本配置。在Spring配置文件中,我们通常创建三个主要的bean: 1. `...

    Quartz在Spring中动态设置cronExpression

    &lt;property name="targetMethod" value="simpleJobTest"/&gt; * * * * ?"/&gt; ``` 在这个配置中: 1. `schedulerJobDetail`定义了一个名为`simpleJobTest`的方法作为定时任务的执行体,该方法位于...

    Quartz在Spring中动态设置cronExpression.docx

    ### Quartz在Spring中动态设置cronExpression的关键知识点 #### 1. cronExpression的理解与构成 - **定义**:cronExpression是一种用于定义周期性任务执行规则的字符串格式,它由六个或七个字段组成,这些字段通过...

    spring学习: spring mvc在redirect请求中传递数据

    public String targetMethod(@ModelAttribute("normalAttribute") String normalAttr, Model model, @ModelAttribute("redirectAttribute") String redirectAttr) { // 使用传递的数据... } ``` 5. **源码解析...

    spring 定时器时间配置.doc

    例如,如果你有一个服务接口或组件,允许用户设定自定义的定时规则,你可以将新设定的CRON表达式传递给这个接口或组件,然后更新`CronTriggerBean`的`cronExpression`属性。这将立即更新触发器的定时规则,从而改变...

    Quartz(二)整合Spring容器中bean及动态调度任务

    &lt;property name="targetMethod" value="execute"/&gt; ``` 最后,创建一个Trigger来决定何时启动`MyJob`。Trigger类型有多种,比如SimpleTrigger、CronTrigger等,这里以CronTrigger为例,设置一个cron表达式来指定...

    Quartz 在 Spring 中如何动态配置时间

    &lt;property name="targetMethod" value="executeTask"/&gt; ``` 这里,`myService`是包含执行任务方法的服务类,`executeTask`是实际执行的方法。 然后,创建`Trigger` Bean,用于指定任务何时触发。例如,使用`...

    Spring 时间配置

    以下将详细介绍Spring中如何配置和管理动态定时任务。 1. **Quartz与Spring的集成** 在Spring中使用Quartz,首先需要配置`MethodInvokingJobDetailFactoryBean`,它定义了定时任务的具体行为,即哪个对象的哪个...

    quartz quartz quartz

    &lt;property name="targetMethod" value="simpleJobTest"/&gt; ``` 2. **配置 CronTrigger**: - 创建一个 `CronTriggerBean` bean,关联到上面定义的 JobDetail,并设置初始的 `cronExpression`。例如,`0/10 * * ...

    Spring整合Quartz实现动态定时器的示例代码

    &lt;property name="targetMethod" value="yourMethodName"/&gt; * * * * ?"/&gt; ``` 这里的配置定义了一个名为`jobDetail`的Job,它调用的是名为`yourServiceBean`的Bean的`yourMethodName`方法。`...

    swift-根据.h文件生成HookTweak文件

    6. **生成Tweak**:最后,你需要将Swift代码编译成动态库,并且创建一个.tweak.xm文件来指定动态库的加载时机和目标应用。这个文件通常是一个Objective-C的源码文件,其中包含`- (void)load`方法,用于在应用程序...

Global site tag (gtag.js) - Google Analytics