spring-cloud-task
spring-cloud-task copied to clipboard
PartitionedHandler: How to pass the step name as an input argument ?
Hello,
In the partitioned-batch-job project, the partitioned handler is created as follows:
@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher, JobExplorer jobExplorer, TaskRepository taskRepository) throws Exception {
...
DeployerPartitionHandler partitionHandler = new DeployerPartitionHandler(taskLauncher, jobExplorer, resource, "workerStep");
...
return partitionHandler;
}
How could I pass the step name, here "workerStep", as an input argument. I tried to modify the method like below:
@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher, JobExplorer jobExplorer, TaskRepository taskRepository, String stepName) throws Exception {
...
DeployerPartitionHandler partitionHandler = new DeployerPartitionHandler(taskLauncher, jobExplorer, resource, stepName);
...
return partitionHandler;
}
and I adapted the job/step definition, but it didn't work. I got an exception saying that the method requires a bean of the type String that wasn't found. Then I defined a bean:
@Bean
public String stepName() {
return new String();
}
and the exception is gone. But I don't think that might be a solution.
Could you please advise ?
Many thanks in advance.
Hello,
Thought to also share my attempt (and thanks for raising an issue as I was about to do same thing)
I did pass the partitionhandler creation portion (at least it did not error out, and when adding a debugger message, it did get the step name). But faced a null pointer exception within the launchworker (like within your other issue https://github.com/spring-cloud/spring-cloud-task/issues/793)
Reference article I had on StackOverflow with my attempts (in case interested: https://stackoverflow.com/questions/68647761/spring-batch-with-multi-step-spring-cloud-task-partitionhandler-for-remote-p)
I got the job name by using stepContext
@Bean
@StepScope
public PartitionHandler partitionHandler(TaskLauncher taskLauncher,
JobExplorer jobExplorer,
@Value("#{stepExecution}") StepExecution stepExecution) throws Exception {
// Then can reference name like
if(stepExecution.getStepName().equalsIgnoreCase("partitionReaderStep"))
{
...
}