我正在阅读文章http://spring.io/guides/gs/batch-processing/,该文章解释了阅读csv并将其写回数据库。我想知道如何读取多个CSV文件,如A.csv,B.csv等,并将内容写回各自的表table_A,table_B等。请注意每个csv文件的内容应该放在不同的表中。
答案 0 :(得分:2)
这里的基本用例是创建与CSV文件一样多的步骤(因为没有默认的MultiResourceItemReader
实现)。
您的每个步骤都会读取CSV(带有FlatFileItemReader
)并写入您的数据库(使用JdbcBatchItemWriter
或同类的另一个)。虽然您将有多个步骤,但如果您的CSV文件具有相同的格式(列,分隔符),则可以使用AbstractStep
对配置进行分解。请参阅文档:http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html
如果没有,那么您至少可以共享公共属性,例如LineMapper
,ItemPreparedStatementSetter
和DataSource
。
<强>更新强>
以下是您的读者和作者的示例:
<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();
}