Search code examples
spring-batchspring-cloud-dataflow

How to modify a job without effecting the other jobs deployed on Spring Cloud Data Flow


How can I modify and deploy 1 job (ex: rebuild the jar file with changing job A) on SCDF but the other jobs in that jar file are still running.

I'm setting up a Spring Batch Job on Spring Cloud Data Flow. There are multiple jobs (A,B,C,...) in my Spring Batch project. I have built a jar file from my project and deployed it on SCDF. I have used --spring.batch.job.names=A/B/C/...when launching tasks to run each job separately. I have tried on creating a new jar and replace it with the old one but it's not work because the old jar is still running.

I have multiple classes related to multiple job and extends from CommonBatchConfiguration:

@Configuration
public class jobAclass extends CommonBatchConfiguration{
    @Bean
        public Job jobA() {
                return jobBuilderFactory
            .get("jobA ")
            .incrementer(new RunIdIncrementer())
            .start(stepA1())
                .build();
        }
    @Bean
    public Step stepA1() {  
        return stepBuilderFactory
                .get("stepA1")
                .tasklet(taskletA1())
                .build();
    }

    public Tasklet taskletA1() {
        return (contribution, chunkContext) -> {
            return RepeatStatus.FINISHED;
        };
    }
}

@Configuration
public class jobBclass extends CommonBatchConfiguration{
    @Bean
        public Job jobB() {
                return jobBuilderFactory
            .get("jobB")
            .incrementer(new RunIdIncrementer())
            .start(stepB1())
                .build();
        }
    @Bean
    public Step stepB1() {  
        return stepBuilderFactory
                .get("stepB1")
                .tasklet(taskletB1())
                .build();
    }   
    public Tasklet taskletB1() {
        return (contribution, chunkContext) -> {
            return RepeatStatus.FINISHED;
        };
    }
}

@EnableBatchProcessing
@Configuration
public class CommonBatchConfiguration {
    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
}

I expect to modify 1 jobs in file jar and deploy it without effect the others


Solution

  • It looks like you need Composed tasks (configured as batch jobs) in your case and you can have the composed tasks deployed as individual tasks (batch applications). For more details on composed tasks, you can see here.

    The feature of modifying one of the jobs' version without affecting the other tasks is something being addressed in 2.3.x of SCDF and you can watch the epic here