在没有 XML 的情况下动态创建 Spring 批处理作业
Dynamic creation of Spring Batch jobs without XML
是否可以为作业设置 Spring 批处理而不 XML?
目前,XML中定义了很多作业 bean:
<bean id="sampleJob" class="com.test.job.TestJob">
<property name="idBase" value="SampleId" />
<property name="targetTableName" value="SAMPLE_TABLE" />
<property name="sql">
<value><![CDATA[
SELECT 42 FROM 1337
]]></value>
</property>
</bean>
Spring 每晚在我们的应用程序中运行批处理。我想让编辑作业的属性成为可能。这个想法是从数据库中获取注入的属性,而不是在 XML.
中对它们进行硬编码
如果您对如何解决问题有更好的想法,请告诉我。目前,我想实现一种提供类似方法的工厂:
public TestJob createJob(String name) {
String sql = db.getSqlFor(name);
String table = db.getTableFor(name);
...
return new TestJob(sql, table, ...);
}
Spring Batch 是否提供这些可能性?我在谷歌上搜索了很多,但没有找到令人满意的解决方案。
提前致谢!
有可能。只需使用 SpringBatch 提供的不同构建器来动态创建您的作业。
他们使用的步骤和所有 reader 和 writer 不必是 spring beans(当然,在这种情况下不会有自动装配,这迫使你这样做你自己)。
@Configuration
public class SimpleJobConfiguration {
private static final String JOB_NAME = "SimpleTestJob";
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Bean
public Job job() throws Exception {
SimpleJobBuilder jobBuilder = this.jobs.get(createJobName(JOB_NAME)).start(firstStep());
for ... {
jobBuilder.next(createAStep( ... params ...));
}
return standardJob.build();
}
public Step createAStep(String name, ... needed parameters ...) throws Exception {
StepBuilder stepBuilder = this.steps.get(name);
build your step
return standardStep1.build();
}
}
是否可以为作业设置 Spring 批处理而不 XML?
目前,XML中定义了很多作业 bean:
<bean id="sampleJob" class="com.test.job.TestJob">
<property name="idBase" value="SampleId" />
<property name="targetTableName" value="SAMPLE_TABLE" />
<property name="sql">
<value><![CDATA[
SELECT 42 FROM 1337
]]></value>
</property>
</bean>
Spring 每晚在我们的应用程序中运行批处理。我想让编辑作业的属性成为可能。这个想法是从数据库中获取注入的属性,而不是在 XML.
中对它们进行硬编码如果您对如何解决问题有更好的想法,请告诉我。目前,我想实现一种提供类似方法的工厂:
public TestJob createJob(String name) {
String sql = db.getSqlFor(name);
String table = db.getTableFor(name);
...
return new TestJob(sql, table, ...);
}
Spring Batch 是否提供这些可能性?我在谷歌上搜索了很多,但没有找到令人满意的解决方案。
提前致谢!
有可能。只需使用 SpringBatch 提供的不同构建器来动态创建您的作业。
他们使用的步骤和所有 reader 和 writer 不必是 spring beans(当然,在这种情况下不会有自动装配,这迫使你这样做你自己)。
@Configuration
public class SimpleJobConfiguration {
private static final String JOB_NAME = "SimpleTestJob";
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Bean
public Job job() throws Exception {
SimpleJobBuilder jobBuilder = this.jobs.get(createJobName(JOB_NAME)).start(firstStep());
for ... {
jobBuilder.next(createAStep( ... params ...));
}
return standardJob.build();
}
public Step createAStep(String name, ... needed parameters ...) throws Exception {
StepBuilder stepBuilder = this.steps.get(name);
build your step
return standardStep1.build();
}
}