Class AbstractJob
- java.lang.Object
- org.springframework.batch.core.job.AbstractJob
- All Implemented Interfaces:
Job
,StepLocator
,org.springframework.beans.factory.Aware
,org.springframework.beans.factory.BeanNameAware
,org.springframework.beans.factory.InitializingBean
public abstract class AbstractJob extends java.lang.Object implements Job, StepLocator, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.InitializingBean
Abstract implementation of theJob
interface. Common dependencies such as aJobRepository
,JobExecutionListener
s, and various configuration parameters are set here. Therefore, common error handling and listener calling activities are abstracted away from implementations.- Author:
- Lucas Ward, Dave Syer, Mahmoud Ben Hassine
Field Summary
Fields Modifier and Type Field Description protected static org.apache.commons.logging.Log
logger
Constructor Summary
Constructors Constructor Description AbstractJob()
Default constructor.AbstractJob(java.lang.String name)
Convenience constructor to immediately add name (which is mandatory but not final).
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
afterPropertiesSet()
Assert mandatory properties:JobRepository
.protected abstract void
doExecute(JobExecution execution)
Extension point for subclasses allowing them to concentrate on processing logic and ignore listeners and repository calls.void
execute(JobExecution execution)
Run the specified job, handling all listener and repository calls, and delegating the actual processing todoExecute(JobExecution)
.protected ExitStatus
getDefaultExitStatusForFailure(java.lang.Throwable ex, JobExecution execution)
Default mapping from throwable toExitStatus
.JobParametersIncrementer
getJobParametersIncrementer()
If clients need to generate new parameters for the next execution in a sequence they can use this incrementer.JobParametersValidator
getJobParametersValidator()
A validator for the job parameters of aJobExecution
.protected JobRepository
getJobRepository()
Convenience method for subclasses to access the job repository.java.lang.String
getName()
abstract Step
getStep(java.lang.String stepName)
Retrieve the step with the given name.abstract java.util.Collection<java.lang.String>
getStepNames()
Retrieve the step names.protected StepExecution
handleStep(Step step, JobExecution execution)
Convenience method for subclasses to delegate the handling of a specific step in the context of the currentJobExecution
.boolean
isRestartable()
Flag to indicate if this job can be restarted, at least in principle.void
registerJobExecutionListener(JobExecutionListener listener)
Register a single listener for theJobExecutionListener
callbacks.void
setBeanName(java.lang.String name)
Set the name property if it is not already set.void
setJobExecutionListeners(JobExecutionListener[] listeners)
Public setter for injectingJobExecutionListener
s.void
setJobParametersIncrementer(JobParametersIncrementer jobParametersIncrementer)
Public setter for theJobParametersIncrementer
.void
setJobParametersValidator(JobParametersValidator jobParametersValidator)
A validator for job parameters.void
setJobRepository(JobRepository jobRepository)
Public setter for theJobRepository
that is needed to manage the state of the batch meta domain (jobs, steps, executions) during the life of a job.void
setName(java.lang.String name)
Set the name property.void
setRestartable(boolean restartable)
Boolean flag to prevent categorically a job from restarting, even if it has failed previously.java.lang.String
toString()
Method Detail
setJobParametersValidator
public void setJobParametersValidator(JobParametersValidator jobParametersValidator)
A validator for job parameters. Defaults to a vanillaDefaultJobParametersValidator
.- Parameters:
jobParametersValidator
- a validator instance
afterPropertiesSet
public void afterPropertiesSet() throws java.lang.Exception
Assert mandatory properties:JobRepository
.- Specified by:
afterPropertiesSet
in interfaceorg.springframework.beans.factory.InitializingBean
- Throws:
java.lang.Exception
- See Also:
InitializingBean.afterPropertiesSet()
setBeanName
public void setBeanName(java.lang.String name)
Set the name property if it is not already set. Because of the order of the callbacks in a Spring container the name property will be set first if it is present. Care is needed with bean definition inheritance - if a parent bean has a name, then its children need an explicit name as well, otherwise they will not be unique.- Specified by:
setBeanName
in interfaceorg.springframework.beans.factory.BeanNameAware
- See Also:
BeanNameAware.setBeanName(java.lang.String)
setName
public void setName(java.lang.String name)
Set the name property. Always overrides the default value if this object is a Spring bean.- Parameters:
name
- the name to be associated with the job.- See Also:
setBeanName(java.lang.String)
getStep
public abstract Step getStep(java.lang.String stepName)
Retrieve the step with the given name. If there is no Step with the given name, then return null.- Specified by:
getStep
in interfaceStepLocator
- Parameters:
stepName
- name of the step- Returns:
- the Step
getStepNames
public abstract java.util.Collection<java.lang.String> getStepNames()
Retrieve the step names.- Specified by:
getStepNames
in interfaceStepLocator
- Returns:
- the step names
getJobParametersValidator
public JobParametersValidator getJobParametersValidator()
Description copied from interface:Job
A validator for the job parameters of aJobExecution
. Clients of a Job may need to validate the parameters for a launch, before or during the execution.- Specified by:
getJobParametersValidator
in interfaceJob
- Returns:
- a validator that can be used to check parameter values (never
null
)
setRestartable
public void setRestartable(boolean restartable)
Boolean flag to prevent categorically a job from restarting, even if it has failed previously.- Parameters:
restartable
- the value of the flag to set (default true)
isRestartable
public boolean isRestartable()
Description copied from interface:Job
Flag to indicate if this job can be restarted, at least in principle.- Specified by:
isRestartable
in interfaceJob
- Returns:
- true if this job can be restarted after a failure
- See Also:
Job.isRestartable()
setJobParametersIncrementer
public void setJobParametersIncrementer(JobParametersIncrementer jobParametersIncrementer)
Public setter for theJobParametersIncrementer
.- Parameters:
jobParametersIncrementer
- theJobParametersIncrementer
to set
getJobParametersIncrementer
@Nullable public JobParametersIncrementer getJobParametersIncrementer()
Description copied from interface:Job
If clients need to generate new parameters for the next execution in a sequence they can use this incrementer. The return value may benull
, in the case that this job does not have a natural sequence.- Specified by:
getJobParametersIncrementer
in interfaceJob
- Returns:
- in incrementer to be used for creating new parameters
setJobExecutionListeners
public void setJobExecutionListeners(JobExecutionListener[] listeners)
Public setter for injectingJobExecutionListener
s. They will all be given the listener callbacks at the appropriate point in the job.- Parameters:
listeners
- the listeners to set.
registerJobExecutionListener
public void registerJobExecutionListener(JobExecutionListener listener)
Register a single listener for theJobExecutionListener
callbacks.- Parameters:
listener
- aJobExecutionListener
setJobRepository
public void setJobRepository(JobRepository jobRepository)
Public setter for theJobRepository
that is needed to manage the state of the batch meta domain (jobs, steps, executions) during the life of a job.- Parameters:
jobRepository
- repository to use during the job execution
getJobRepository
protected JobRepository getJobRepository()
Convenience method for subclasses to access the job repository.- Returns:
- the jobRepository
doExecute
protected abstract void doExecute(JobExecution execution) throws JobExecutionException
Extension point for subclasses allowing them to concentrate on processing logic and ignore listeners and repository calls. Implementations usually are concerned with the ordering of steps, and delegate actual step processing tohandleStep(Step, JobExecution)
.- Parameters:
execution
- the currentJobExecution
- Throws:
JobExecutionException
- to signal a fatal batch framework error (not a business or validation exception)
execute
public final void execute(JobExecution execution)
Run the specified job, handling all listener and repository calls, and delegating the actual processing todoExecute(JobExecution)
.- Specified by:
execute
in interfaceJob
- Parameters:
execution
- aJobExecution
- Throws:
StartLimitExceededException
- if start limit of one of the steps was exceeded- See Also:
Job.execute(JobExecution)
handleStep
protected final StepExecution handleStep(Step step, JobExecution execution) throws JobInterruptedException, JobRestartException, StartLimitExceededException
Convenience method for subclasses to delegate the handling of a specific step in the context of the currentJobExecution
. Clients of this method do not need access to theJobRepository
, nor do they need to worry about populating the execution context on a restart, nor detecting the interrupted state (in job or step execution).- Parameters:
step
- theStep
to executeexecution
- the currentJobExecution
- Returns:
- the
StepExecution
corresponding to this step - Throws:
JobInterruptedException
- if theJobExecution
has been interrupted, and in particular ifBatchStatus.ABANDONED
orBatchStatus.STOPPING
is detectedStartLimitExceededException
- if the start limit has been exceeded for this stepJobRestartException
- if the job is in an inconsistent state from an earlier failure
getDefaultExitStatusForFailure
protected ExitStatus getDefaultExitStatusForFailure(java.lang.Throwable ex, JobExecution execution)
Default mapping from throwable toExitStatus
.- Parameters:
ex
- the cause of the failureexecution
- theJobExecution
instance.- Returns:
- an
ExitStatus
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object