我尝试从一个表读取数据并使用spring批处理写入其他表但现在我的要求是从多个表读取数据并写入文件,因此我们可以通过定义多个作业来实现这一点,但我想这样做使用单个作业意味着单个读取器和单个写入器和单个处理器。
请提供一些有关此方案的参考资料。
答案 0 :(得分:0)
春季批次提供的课程不可能,但你可以用它来解决问题
在chunk
处理之前添加一步,创建一个自定义tasklet,您将在其中分配不同的sql和不同的输出文件,并使它们在循环中运行,只要有sqls可以执行。
这可能听起来很困难,但我在同样的情况下工作,这里有一些想法你怎么做 -
<flow id="databaseReadWriteJob">
<step id="step1_setReaderWriter">
<tasklet ref="setReaderWriter" />
<next on="FAILED" to="" />
<next on="*" to="dataExtractionStep" />
</step>
<step id="dataExtractionStep">
<tasklet>
<chunk reader="dbReader" writer="flatFileWriter" commit-interval="${commit-interval}" />
</tasklet>
<next on="FAILED" to="" />
<next on="*" to="step3_removeProcessedSql" />
</step>
<step id="step3_removeProcessedSql">
<tasklet ref="removeProcessedSql" />
<next on="NOOP" to="step1_setReaderWriter" />
<next on="*" to="step4_validateNumOfSuccessfulSteps" />
</step>
</flow>
这里是setReaderWriter的bean
<beans:bean id="setReaderWriter" class="SetReaderWriter">
<beans:property name="reader" ref="dbReader" />
<beans:property name="flatFileWriter" ref="flatFileWriter" />
<beans:property name="fileSqlMap" ref="jobSqlFileMap" />
<beans:property name="fileNameBuilder" ref="localFileNameBuilder" />
<beans:property name="sourceFolder" value="${dataDir}" />
<beans:property name="dateDiff" value="${dateDiff}" />
您需要在Reader或Writer中动态添加的任何内容。上面的sqlMap是sql作为键的映射,输出文件作为其值 我希望它可以提供帮助。