Class MethodInvokingJobDetailFactoryBean

java.lang.Object
org.springframework.util.MethodInvoker
org.springframework.beans.support.ArgumentConvertingMethodInvoker
org.springframework.scheduling.quartz.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

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.

Since:
18.02.2004
Author:
Juergen Hoeller, Alef Arendsen
See Also:
  • Constructor Details

    • MethodInvokingJobDetailFactoryBean

      public MethodInvokingJobDetailFactoryBean()
  • Method Details

    • setName

      public void setName(String name)
      Set the name of the job.

      Default is the bean name of this FactoryBean.

    • setGroup

      public void setGroup(String group)
      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

      public void setTargetBeanName(String targetBeanName)
      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

      public void setBeanName(String beanName)
      Specified by:
      setBeanName in interface org.springframework.beans.factory.BeanNameAware
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoader classLoader)
      Specified by:
      setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware
    • setBeanFactory

      public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
      Specified by:
      setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
    • resolveClassName

      protected Class<?> resolveClassName(String className) throws ClassNotFoundException
      Overrides:
      resolveClassName in class org.springframework.util.MethodInvoker
      Throws:
      ClassNotFoundException
    • afterPropertiesSet

      public void afterPropertiesSet() throws ClassNotFoundException, NoSuchMethodException
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      ClassNotFoundException
      NoSuchMethodException
    • postProcessJobDetail

      protected void postProcessJobDetail(JobDetail jobDetail)
      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

      public Class<?> getTargetClass()
      Overridden to support the "targetBeanName" feature.
      Overrides:
      getTargetClass in class org.springframework.util.MethodInvoker
    • getTargetObject

      public Object getTargetObject()
      Overridden to support the "targetBeanName" feature.
      Overrides:
      getTargetObject in class org.springframework.util.MethodInvoker
    • getObject

      @Nullable public JobDetail getObject()
      Specified by:
      getObject in interface org.springframework.beans.factory.FactoryBean<JobDetail>
    • getObjectType

      public Class<? extends JobDetail> getObjectType()
      Specified by:
      getObjectType in interface org.springframework.beans.factory.FactoryBean<JobDetail>
    • isSingleton

      public boolean isSingleton()
      Specified by:
      isSingleton in interface org.springframework.beans.factory.FactoryBean<JobDetail>