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 2.1.4 and higher, as of Spring 4.1.
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 |
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, setTypeConverter
public void setName(String name)
Default is the bean name of this FactoryBean.
public void setGroup(String group)
Default is the default group of the Scheduler.
Scheduler.DEFAULT_GROUP
public void setConcurrent(boolean concurrent)
@PersistJobDataAfterExecution
and
@DisallowConcurrentExecution
markers.
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).
public void setBeanName(String beanName)
setBeanName
in interface org.springframework.beans.factory.BeanNameAware
public void setBeanClassLoader(ClassLoader classLoader)
setBeanClassLoader
in interface org.springframework.beans.factory.BeanClassLoaderAware
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
setBeanFactory
in interface org.springframework.beans.factory.BeanFactoryAware
protected Class<?> resolveClassName(String className) throws ClassNotFoundException
resolveClassName
in class org.springframework.util.MethodInvoker
ClassNotFoundException
public void afterPropertiesSet() throws ClassNotFoundException, NoSuchMethodException
afterPropertiesSet
in interface org.springframework.beans.factory.InitializingBean
ClassNotFoundException
NoSuchMethodException
protected 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.MethodInvoker
public Object getTargetObject()
"targetBeanName"
feature.getTargetObject
in class org.springframework.util.MethodInvoker
@Nullable public 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>