Class TaskExecutorPartitionHandler

java.lang.Object
org.springframework.batch.core.partition.support.AbstractPartitionHandler
org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler
All Implemented Interfaces:
PartitionHandler, StepHolder, org.springframework.beans.factory.InitializingBean

public class TaskExecutorPartitionHandler extends AbstractPartitionHandler implements StepHolder, org.springframework.beans.factory.InitializingBean
A PartitionHandler that uses a TaskExecutor to execute the partitioned Step locally in multiple threads. This can be an effective approach for scaling batch steps that are IO intensive, like directory and filesystem scanning and copying.
By default, the thread pool is synchronous.
Since:
2.0
Author:
Sebastien Gerard, Dave Syer, Mahmoud Ben Hassine
  • Constructor Details

    • TaskExecutorPartitionHandler

      public TaskExecutorPartitionHandler()
  • Method Details

    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • setTaskExecutor

      public void setTaskExecutor(org.springframework.core.task.TaskExecutor taskExecutor)
      Setter for the TaskExecutor that is used to farm out step executions to multiple threads.
      Parameters:
      taskExecutor - a TaskExecutor
    • setStep

      public void setStep(Step step)
      Setter for the Step that will be used to execute the partitioned StepExecution. This is a regular Spring Batch step, with all the business logic required to complete an execution based on the input parameters in its StepExecution context.
      Parameters:
      step - the Step instance to use to execute business logic
    • getStep

      public Step getStep()
      The step instance that will be executed in parallel by this handler.
      Specified by:
      getStep in interface StepHolder
      Returns:
      the step instance that will be used
      See Also:
    • doHandle

      protected Set<StepExecution> doHandle(StepExecution managerStepExecution, Set<StepExecution> partitionStepExecutions) throws Exception
      Description copied from class: AbstractPartitionHandler
      Executes the specified StepExecution instances and returns an updated view of them. Throws an Exception if anything goes wrong.
      Specified by:
      doHandle in class AbstractPartitionHandler
      Parameters:
      managerStepExecution - the whole partition execution
      partitionStepExecutions - the StepExecution instances to execute
      Returns:
      an updated view of these completed StepExecution instances
      Throws:
      Exception - if anything goes wrong. This allows implementations to be liberal and rely on the caller to translate an exception into a step failure as necessary.
    • createTask

      protected FutureTask<StepExecution> createTask(Step step, StepExecution stepExecution)
      Creates the task executing the given step in the context of the given execution.
      Parameters:
      step - the step to execute
      stepExecution - the given execution
      Returns:
      the task executing the given step