Spring批处理作业更新不同的表

时间:2015-11-16 12:42:21

标签: spring spring-boot spring-batch

我正在阅读文章http://spring.io/guides/gs/batch-processing/,该文章解释了阅读csv并将其写回数据库。我想知道如何读取多个CSV文件,如A.csv,B.csv等,并将内容写回各自的表table_A,table_B等。请注意每个csv文件的内容应该放在不同的表中。

1 个答案:

答案 0 :(得分:2)

这里的基本用例是创建与CSV文件一样多的步骤(因为没有默认的MultiResourceItemReader实现)。

您的每个步骤都会读取CSV(带有FlatFileItemReader)并写入您的数据库(使用JdbcBatchItemWriter或同类的另一个)。虽然您将有多个步骤,但如果您的CSV文件具有相同的格式(列,分隔符),则可以使用AbstractStep对配置进行分解。请参阅文档:http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html

如果没有,那么您至少可以共享公共属性,例如LineMapperItemPreparedStatementSetterDataSource

<强>更新

以下是您的读者和作者的示例:

    <bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader">
        <property name="resource" value="yourFile.csv" />
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="names" value="column1,column2,column3..." />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="prototypeBeanName" value="yourBeanClass" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

    <bean id="writer" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
        <property name="dataSource" ref="dataSource" />
        <property name="sql">
            <value>
                <![CDATA[        
                    insert into YOUR_TABLE(column1,column2,column3...) 
                    values (:beanField1, :beanField2, :beanField3...)
                ]]>
            </value>
        </property>
        <property name="itemSqlParameterSourceProvider">
            <bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
        </property>
    </bean>

更新2

这是一个链接作业中步骤的示例(使用基于Java的配置):

@Bean
public Job job() {
     return jobBuilderFactory().get("job").incrementer(new RunIdIncrementer())
     .start(step1()).next(step2()).build();
}