Class MethodInvokingJobDetailFactoryBean
- All Implemented Interfaces:
org.springframework.beans.factory.Aware
,org.springframework.beans.factory.BeanClassLoaderAware
,org.springframework.beans.factory.BeanFactoryAware
,org.springframework.beans.factory.BeanNameAware
,org.springframework.beans.factory.FactoryBean<JobDetail>
,org.springframework.beans.factory.InitializingBean
FactoryBean
that exposes a
JobDetail
object which delegates job execution to a
specified (static or non-static) method. Avoids the need for implementing
a one-line Quartz Job that just invokes an existing service method on a
Spring-managed target bean.
Inherits common configuration properties from the MethodInvoker
base class, such as "targetObject"
and
"targetMethod"
, adding support for lookup of the target
bean by name through the "targetBeanName"
property
(as alternative to specifying a "targetObject" directly, allowing for
non-singleton target objects).
Supports both concurrently running jobs and non-currently running jobs through the "concurrent" property. Jobs created by this MethodInvokingJobDetailFactoryBean are by default volatile and durable (according to Quartz terminology).
NOTE: JobDetails created via this FactoryBean are not serializable and thus not suitable for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for each case where you want a persistent job to delegate to a specific service method.
Compatible with Quartz 2.1.4 and higher, as of Spring 4.1.
- Since:
- 18.02.2004
- Author:
- Juergen Hoeller, Alef Arendsen
- See Also:
-
setTargetBeanName(java.lang.String)
MethodInvoker.setTargetObject(java.lang.Object)
MethodInvoker.setTargetMethod(java.lang.String)
setConcurrent(boolean)
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Quartz Job implementation that invokes a specified method.static class
Extension of the MethodInvokingJob, implementing the StatefulJob interface. -
Field Summary
Fields inherited from class org.springframework.util.MethodInvoker
targetClass
Fields inherited from interface org.springframework.beans.factory.FactoryBean
OBJECT_TYPE_ATTRIBUTE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Class<?>
Overridden to support the"targetBeanName"
feature.Overridden to support the"targetBeanName"
feature.boolean
protected void
postProcessJobDetail
(JobDetail jobDetail) Callback for post-processing the JobDetail to be exposed by this FactoryBean.protected Class<?>
resolveClassName
(String className) void
setBeanClassLoader
(ClassLoader classLoader) void
setBeanFactory
(org.springframework.beans.factory.BeanFactory beanFactory) void
setBeanName
(String beanName) void
setConcurrent
(boolean concurrent) Specify whether multiple jobs should be run in a concurrent fashion.void
Set the group of the job.void
Set the name of the job.void
setTargetBeanName
(String targetBeanName) Set the name of the target bean in the Spring BeanFactory.Methods inherited from class org.springframework.beans.support.ArgumentConvertingMethodInvoker
doFindMatchingMethod, findMatchingMethod, getDefaultTypeConverter, getTypeConverter, registerCustomEditor, setTypeConverter
Methods inherited from class org.springframework.util.MethodInvoker
getArguments, getPreparedMethod, getTargetMethod, getTypeDifferenceWeight, invoke, isPrepared, prepare, setArguments, setStaticMethod, setTargetClass, setTargetMethod, setTargetObject
-
Constructor Details
-
MethodInvokingJobDetailFactoryBean
public MethodInvokingJobDetailFactoryBean()
-
-
Method Details
-
setName
Set the name of the job.Default is the bean name of this FactoryBean.
-
setGroup
Set the group of the job.Default is the default group of the Scheduler.
- See Also:
-
setConcurrent
public void setConcurrent(boolean concurrent) Specify whether multiple jobs should be run in a concurrent fashion. The behavior when one does not want concurrent jobs to be executed is realized through adding the@PersistJobDataAfterExecution
and@DisallowConcurrentExecution
markers. More information on stateful versus stateless jobs can be found here.The default setting is to run jobs concurrently.
-
setTargetBeanName
Set the name of the target bean in the Spring BeanFactory.This is an alternative to specifying
"targetObject"
, allowing for non-singleton beans to be invoked. Note that specified "targetObject" and"targetClass"
values will override the corresponding effect of this "targetBeanName" setting (i.e. statically pre-define the bean type or even the bean object). -
setBeanName
- Specified by:
setBeanName
in interfaceorg.springframework.beans.factory.BeanNameAware
-
setBeanClassLoader
- Specified by:
setBeanClassLoader
in interfaceorg.springframework.beans.factory.BeanClassLoaderAware
-
setBeanFactory
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) - Specified by:
setBeanFactory
in interfaceorg.springframework.beans.factory.BeanFactoryAware
-
resolveClassName
- Overrides:
resolveClassName
in classorg.springframework.util.MethodInvoker
- Throws:
ClassNotFoundException
-
afterPropertiesSet
- Specified by:
afterPropertiesSet
in interfaceorg.springframework.beans.factory.InitializingBean
- Throws:
ClassNotFoundException
NoSuchMethodException
-
postProcessJobDetail
Callback for post-processing the JobDetail to be exposed by this FactoryBean.The default implementation is empty. Can be overridden in subclasses.
- Parameters:
jobDetail
- the JobDetail prepared by this FactoryBean
-
getTargetClass
Overridden to support the"targetBeanName"
feature.- Overrides:
getTargetClass
in classorg.springframework.util.MethodInvoker
-
getTargetObject
Overridden to support the"targetBeanName"
feature.- Overrides:
getTargetObject
in classorg.springframework.util.MethodInvoker
-
getObject
- Specified by:
getObject
in interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-
getObjectType
- Specified by:
getObjectType
in interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-
isSingleton
public boolean isSingleton()- Specified by:
isSingleton
in interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-