【发布时间】:2014-09-27 03:05:33
【问题描述】:
我在同一个项目中有两个独立的 spring 批处理作业,因为我想使用相同的基础设施相关 bean。一切都是用 Java 配置的。我想知道是否有一种正确的方法可以独立地启动作业,例如基于 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 Boot 应用程序。如果您有一些适用于 Spring Boot 的东西,为什么需要帮助?
-
抱歉 Dave 我的愚蠢问题,但我是 Spring Boot、Spring Batch 和 Java 配置的新手。我想要实现的是在同一个代码库中拥有两个以上的作业,以便它们可以共享 JPA 实体,例如...,但仍然可以使用 Spring Boot 以某种方式分别运行它们。
标签: spring spring-batch spring-boot spring-java-config