How can I enable or disable a Step dynamically reading the enableStatus from the Database?

Viewed 19
@Bean
    public Step step1(){
        return stepBuilderFactory.get("checkInfo").<A, B>chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }

I have created this step called "checkInfo", and i have other steps with other name. In my database I have a table "STEPS" with the name of the step and if it is enabled or disabled. So i have to chain only the steps enabled to my JOB.

@PostConstruct
    public void getActiveSteps(){
        stepsList = stepManagementRepository.findAllByActive(true);
        for (StepManagement s : stepsList){
            System.out.println(s.getDescription());
        }

I get all of the active ones in this function. The problem is, how can I get the step i want by the name saved on my DB? (So then i can use the .next() in the job, only if the step is active)

@Bean
    public Job runJob(){
        SimpleJobBuilder jobBuilder = jobBuilderFactory.get("mainCalculationJob")
                .incrementer(new RunIdIncrementer())
                .start(step1());
        return jobBuilder.build();
    }
    
1 Answers

I solved getting bean by name:

@Bean(name = "checkInfo")
    public Step step1(){
        return stepBuilderFactory.get("checkInfo").<A, B>chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }

    @Bean
    public Job runJob(){
        SimpleJobBuilder jobBuilder = jobBuilderFactory.get("mainCalculationJob")
                .incrementer(new RunIdIncrementer())
                .start((Step) context.getBean("checkInfo"));

        return jobBuilder.build();
    }
Related