微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 无XML的动态创建Spring Batch作业

是否可以在没有XML的情况下为作业设置Spring Batch?

目前,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 Batch每晚都在我们的应用程序中运行.我希望能够编辑作业的属性.我们的想法是从数据库获取注入的属性,而不是用XML对它们进行硬编码.

如果您对如何解决问题有更好的了解,请告诉我.目前,我想实现一种提供类似方法的工厂:

public TestJob createJob(String name) {
    String sql = db.getsqlFor(name);
    String table = db.getTableFor(name);
    ...
    return new TestJob(sql, table, ...);
}

Spring Batch是否提供这些可能性?我google了很多但没有找到令人满意的解决方案.

提前致谢!

解决方法:

有可能的.只需使用SpringBatch提供的不同构建器即可动态创建作业.

他们使用的步骤和所有读者和作者不一定是春豆(当然,在这种情况下,没有自动装配,这迫使你自己这样做).

@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();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。