一、概述
methodinvokingjobdetailfactory
是一个 Quartz 框架中的类,它允许我们通过配置来指定一个对象,并调用该对象的某个方法来运行 Job。这个类可以使我们在一个 Job 中注入一些外部的组件或者是进行某些逻辑处理。我们可以在配置文件中声明方法名,目标对象,参数等属性来使用这个类。下面我们来详细了解一下 methodinvokingjobdetailfactory
。
二、关键属性
methodinvokingjobdetailfactory
中有几个关键的属性,以下是这些属性的详细说明:
1. targetObject
这个属性用来指定目标对象,即我们将要调用的那个对象。我们可以在配置文件中使用 targetObject
属性指定对象的名称,也可以使用 targetObject
属性指定一个具体的实例。
<bean id="someTargetObject" class="example.SomeObject"/>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" value="someTargetObject"/>
<property name="targetMethod" value="doSomething"/>
</bean>
2. targetMethod
这个属性用来指定目标方法,即我们将要调用的那个方法。我们可以在配置文件中使用 targetMethod
属性指定方法的名称,并通过设置 arguments
属性指定方法的参数,也可以不设置 arguments
属性不传参数。
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="someTargetObject"/>
<property name="targetMethod" value="doSomething"/>
<property name="arguments">
<list>
<value>arg1</value>
<value>arg2</value>
</list>
</property>
</bean>
3. concurrent
这个属性用来指定是否并发执行 Job,默认情况下为 true
。如果我们想让 Job 串行执行,可以将这个属性设置为 false
。
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="someTargetObject"/>
<property name="targetMethod" value="doSomething"/>
<property name="concurrent" value="false"/>
</bean>
三、示例
下面是一个完整的配置示例,该配置会创建一个可以并发执行的 Job,调用指定对象的指定方法,并传递参数。
<bean id="someTargetObject" class="example.SomeObject"/>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="someTargetObject"/>
<property name="targetMethod" value="doSomething"/>
<property name="arguments">
<list>
<value>arg1</value>
<value>arg2</value>
</list>
</property>
<property name="concurrent" value="true"/>
</bean>
<bean id="schedulerFactory" class="org.quartz.impl.StdSchedulerFactory"/>
<bean id="scheduler" factory-bean="schedulerFactory" factory-method="getScheduler"/>
<bean id="jobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="repeatInterval" value="5000"/>
<property name="startDelay" value="1000"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="jobTrigger"/>
</list>
</property>
<property name="scheduler" ref="scheduler"/>
</bean>
四、总结
methodinvokingjobdetailfactory
是 Quartz 中一个重要的类,它可以帮助我们方便地将 Job 与我们应用中其他的对象关联起来,从而更好地完成各种任务。在使用过程中,我们需要注意配置属性,特别是 targetObject
和 targetMethod
这两个属性的值,以及是否并发执行 Job 等问题。