public class MethodInvokingJobDetailFactoryBean extends org.springframework.beans.support.ArgumentConvertingMethodInvoker implements org.springframework.beans.factory.FactoryBean<JobDetail>, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, 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 1.8 as well as Quartz 2.0-2.2, as of Spring 4.0. Note: Quartz 1.x support is deprecated - please upgrade to Quartz 2.0+.
setTargetBeanName(java.lang.String),
MethodInvoker.setTargetObject(java.lang.Object),
MethodInvoker.setTargetMethod(java.lang.String),
setConcurrent(boolean)| Modifier and Type | Class and Description |
|---|---|
static class |
MethodInvokingJobDetailFactoryBean.MethodInvokingJob
Quartz Job implementation that invokes a specified method.
|
static class |
MethodInvokingJobDetailFactoryBean.StatefulMethodInvokingJob
Extension of the MethodInvokingJob, implementing the StatefulJob interface.
|
| Constructor and Description |
|---|
MethodInvokingJobDetailFactoryBean() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
JobDetail |
getObject() |
Class<? extends JobDetail> |
getObjectType() |
Class<?> |
getTargetClass()
Overridden to support the
"targetBeanName" feature. |
Object |
getTargetObject()
Overridden to support the
"targetBeanName" feature. |
boolean |
isSingleton() |
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 or not multiple jobs should be run in a concurrent
fashion.
|
void |
setGroup(String group)
Set the group of the job.
|
void |
setJobListenerNames(String... names)
Deprecated.
as of Spring 4.0, since it only works on Quartz 1.x
|
void |
setName(String name)
Set the name of the job.
|
void |
setTargetBeanName(String targetBeanName)
Set the name of the target bean in the Spring BeanFactory.
|
doFindMatchingMethod, findMatchingMethod, getDefaultTypeConverter, getTypeConverter, registerCustomEditor, setTypeConverterpublic void setName(String name)
Default is the bean name of this FactoryBean.
JobDetail.setName(java.lang.String)public void setGroup(String group)
Default is the default group of the Scheduler.
public void setConcurrent(boolean concurrent)
StatefulJob interface.
More information on stateful versus stateless jobs can be found
here.
The default setting is to run jobs concurrently.
public void setTargetBeanName(String targetBeanName)
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).
@Deprecated public void setJobListenerNames(String... names)
A JobListener name always refers to the name returned by the JobListener implementation.
public void setBeanName(String beanName)
setBeanName in interface org.springframework.beans.factory.BeanNameAwarepublic void setBeanClassLoader(ClassLoader classLoader)
setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAwarepublic void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAwareprotected Class<?> resolveClassName(String className) throws ClassNotFoundException
resolveClassName in class org.springframework.util.MethodInvokerClassNotFoundExceptionpublic void afterPropertiesSet()
throws ClassNotFoundException,
NoSuchMethodException
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanClassNotFoundExceptionNoSuchMethodExceptionprotected void postProcessJobDetail(JobDetail jobDetail)
The default implementation is empty. Can be overridden in subclasses.
jobDetail - the JobDetail prepared by this FactoryBeanpublic Class<?> getTargetClass()
"targetBeanName" feature.getTargetClass in class org.springframework.util.MethodInvokerpublic Object getTargetObject()
"targetBeanName" feature.getTargetObject in class org.springframework.util.MethodInvokerpublic JobDetail getObject()
getObject in interface org.springframework.beans.factory.FactoryBean<JobDetail>public Class<? extends JobDetail> getObjectType()
getObjectType in interface org.springframework.beans.factory.FactoryBean<JobDetail>public boolean isSingleton()
isSingleton in interface org.springframework.beans.factory.FactoryBean<JobDetail>