Вы можете использовать профили для определения ваших шагов и соответственно загружать их во время выполнения, используя свойство spring.profiles.active
. Например:
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@EnableBatchProcessing
public class JobWithProfiles {
@Autowired
private JobBuilderFactory jobs;
@Bean
public Job job(Step step) {
return jobs.get("job")
.start(step)
.build();
}
@Configuration
public static class Step1Config {
@Autowired
private StepBuilderFactory steps;
@Profile("threshold")
@Bean
public Step step() {
return steps.get("step")
.tasklet((contribution, chunkContext) -> {
System.out.println("executed in threshold mode");
return RepeatStatus.FINISHED;
})
.build();
}
}
@Configuration
public static class Step2Config {
@Autowired
private StepBuilderFactory steps;
@Profile("force")
@Bean
public Step step() {
return steps.get("step")
.tasklet((contribution, chunkContext) -> {
System.out.println("executed in force mode");
return RepeatStatus.FINISHED;
})
.build();
}
}
}
Примечание: вы также можете поместить аннотацию @Profile
в класс конфигурации.
Теперь, если вы запустите это приложение с java -jar -Dspring.profiles.active=threshold HelloWorld.jar hello.properties
, оно должно вывести: executed in threshold mode
. То же с профилем force
.
Подробнее о профилях см. На этой странице: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
Надеюсь, это поможет.