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
Nested ClassesModifier and TypeClassDescriptionstatic classQuartz Job implementation that invokes a specified method.static classExtension of the MethodInvokingJob, implementing the StatefulJob interface. -
Field Summary
Fields inherited from class org.springframework.util.MethodInvoker
targetClassFields inherited from interface org.springframework.beans.factory.FactoryBean
OBJECT_TYPE_ATTRIBUTE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidClass<?>Overridden to support the"targetBeanName"feature.Overridden to support the"targetBeanName"feature.booleanprotected voidpostProcessJobDetail(JobDetail jobDetail) Callback for post-processing the JobDetail to be exposed by this FactoryBean.protected Class<?>resolveClassName(String className) voidsetBeanClassLoader(ClassLoader classLoader) voidsetBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) voidsetBeanName(String beanName) voidsetConcurrent(boolean concurrent) Specify whether multiple jobs should be run in a concurrent fashion.voidSet the group of the job.voidSet the name of the job.voidsetTargetBeanName(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, setTypeConverterMethods 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@PersistJobDataAfterExecutionand@DisallowConcurrentExecutionmarkers. 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:
setBeanNamein interfaceorg.springframework.beans.factory.BeanNameAware
-
setBeanClassLoader
- Specified by:
setBeanClassLoaderin interfaceorg.springframework.beans.factory.BeanClassLoaderAware
-
setBeanFactory
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) - Specified by:
setBeanFactoryin interfaceorg.springframework.beans.factory.BeanFactoryAware
-
resolveClassName
- Overrides:
resolveClassNamein classorg.springframework.util.MethodInvoker- Throws:
ClassNotFoundException
-
afterPropertiesSet
- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Throws:
ClassNotFoundExceptionNoSuchMethodException
-
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:
getTargetClassin classorg.springframework.util.MethodInvoker
-
getTargetObject
Overridden to support the"targetBeanName"feature.- Overrides:
getTargetObjectin classorg.springframework.util.MethodInvoker
-
getObject
- Specified by:
getObjectin interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-
getObjectType
- Specified by:
getObjectTypein interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-
isSingleton
public boolean isSingleton()- Specified by:
isSingletonin interfaceorg.springframework.beans.factory.FactoryBean<JobDetail>
-