我在同一个项目中有两个独立的 spring 批处理作业,因为我想使用相同的基础设施相关 bean。一切都是用 Java 配置的。我想知道是否有适当的方法来独立启 Action 业,例如基于 main 方法中的第一个 java app 参数。如果我运行 SpringApplication.run
只有第二个工作被魔法执行。
主要方法如下所示:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setWebEnvironment(false);
ApplicationContext ctx= app.run(args);
}
}
并且这两个作业的配置如 Spring.io 上的 Spring Batch 入门教程中所述。这是第一个作业的配置文件,第二个以相同的方式配置。
@Configuration
@EnableBatchProcessing
@Import({StandaloneInfrastructureConfiguration.class, ServicesConfiguration.class})
public class AddPodcastJobConfiguration {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory stepBuilderFactory;
//reader, writer, processor...
}
为了实现模块化,我创建了一个 AppConfig 类,我在其中为两个作业定义了工厂:
@Configuration
@EnableBatchProcessing(modular=true)
public class AppConfig {
@Bean
public ApplicationContextFactory addNewPodcastJobs(){
return new GenericApplicationContextFactory(AddPodcastJobConfiguration.class);
}
@Bean
public ApplicationContextFactory newEpisodesNotificationJobs(){
return new GenericApplicationContextFactory(NotifySubscribersJobConfiguration.class);
}
}
附言我是 Java 配置 Spring Boot 和 Spring Batch 中的 Spring 配置新手...
最佳答案
只需设置“spring.batch.job.names=myJob”属性。您可以在启动应用程序时将其设置为 SystemProperty (-Dspring.batch.job.names=myjob)。如果您已定义此属性,则 spring-batch-starter 将仅启动由此属性定义的作业。
关于spring - 如何根据应用程序参数选择要运行的spring批处理作业-spring boot java config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25122103/