When executing a Spring Batch job via a task, Spring Cloud Task can be configured to emit informational messages based on the Spring Batch listeners available in Spring Batch. Specifically the following Spring Batch listeners are autoconfigured into each batch job and emit messages on the associated Spring Cloud Stream channels when run via Spring Cloud Task:
JobExecutionListener
- job-execution-events
StepExecutionListener
- step-execution-events
ChunkListener
- chunk-events
ItemReadListener
- item-read-events
ItemProcessListener
- item-process-events
ItemWriteListener
- item-write-events
SkipListener
- skip-events
The above listeners are autoconfigured into any AbstractJob
when the appropriate
beans exist in the context (a Job
and a TaskLifecycleListener
). Configuration to
listen to these events is handled the same way binding to any other Spring
Cloud Stream channel is done. Our task (the one running the batch job) serves as a
Source
, with the listening applications serving as either a Processor
or Sink
.
An example could be to have an application listening to the job-execution-events
channel
for the start and stop of a job. To configure the listening application, you’d configure
the input to be job-execution-events
as follows
spring.cloud.stream.bindings.input.destination=job-execution-events
![]() | Note |
---|---|
A binder implementation is also required to be on the classpath. |
![]() | Note |
---|---|
A sample batch event application can be found in the samples module of the Spring Cloud Task Project here. |
One of the options that Spring Cloud Task offers for batch events is the ability to alter the channel to which a
specific listener can emit its messages. To do this use the following configuration:
spring.cloud.stream.bindings.<the channel>.destination=<new destination>
.
For example: If StepExecutionListener needs to emit its messages to another channel my-step-execution-events
instead of the default step-execution-events
the following configuration can be added:
spring.cloud.stream.bindings.step-execution-events.destination=my-step-execution-events`
To disable the all batch event listener functionality, use the following configuration:
spring.cloud.task.batch.events.enabled=false
To disable a specific batch event use the following configuration:
spring.cloud.task.batch.events.<batch event listener>.enabled=false
:
spring.cloud.task.batch.events.job-execution.enabled=false spring.cloud.task.batch.events.step-execution.enabled=false spring.cloud.task.batch.events.chunk.enabled=false spring.cloud.task.batch.events.item-read.enabled=false spring.cloud.task.batch.events.item-process.enabled=false spring.cloud.task.batch.events.item-write.enabled=false spring.cloud.task.batch.events.skip.enabled=false
By default batch events have Ordered.LOWEST_PRECEDENCE
, to change this value ( for example to 5 ) use the following configuration:
spring.cloud.task.batch.events.job-execution-order=5 spring.cloud.task.batch.events.step-execution-order=5 spring.cloud.task.batch.events.chunk-order=5 spring.cloud.task.batch.events.item-read-order=5 spring.cloud.task.batch.events.item-process-order=5 spring.cloud.task.batch.events.item-write-order=5 spring.cloud.task.batch.events.skip-order=5