Java 在运行时动态选择spring批处理读取器
我有一个spring批处理作业,可以将各种银行对账单转换为我的应用程序。每种银行对账单类型都有一个不同的读卡器,所有银行对账单类型只有一个写卡器。这项工作非常简单-读取、处理和写入:Java 在运行时动态选择spring批处理读取器,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个spring批处理作业,可以将各种银行对账单转换为我的应用程序。每种银行对账单类型都有一个不同的读卡器,所有银行对账单类型只有一个写卡器。这项工作非常简单-读取、处理和写入: <batch:job id="importer" restartable="true"> <batch:step id="import"> <batch:tasklet> <batch:chunk reader="reader
<batch:job id="importer" restartable="true">
<batch:step id="import">
<batch:tasklet>
<batch:chunk reader="reader" writer="writer" processor="processor" commit-interval="10" />
</batch:tasklet>
</batch:step>
</batch:job>
现在,我希望最终用户提供一个对账单文件和银行信息,然后在运行时选择一个相应的spring批处理读取器来运行此作业。理想情况下,如果我能在第一步就提前阅读,并尝试先“猜测”银行形式的对账单格式,那就太好了。但我离题了
是否可以在运行作业之前将读取器注入作业?或者有更好的方法来实现我的目标吗?问题是,(文件)ItemReader是在步骤开始之前构建的,这意味着文件也将在步骤开始之前打开
您是否尝试将读取器转换和映射逻辑移动到处理器?您可以为此使用PassThroughLineMapper
另一个非常干净的解决方案可能需要额外的预处理步骤,以确定所需的读卡器类型:
- 创建一个检查类型的步骤(使用经典步骤配置读取第一行,或使用
- 使用及
- 每个读卡器类型的步骤配置
- 每个读者
<batch:chunk reader="#{jobParameters['reader.beanId']}" writer="writer" processor="processor" commit-interval="10" />
您也可以考虑JSP和STEP属性的后期绑定,这里是Spring Buffy
的链接。我们已经尝试实现这一点,但是它似乎不起作用(使用Spring Palt3.0.4,它在这一点上不能访问JooPosits)。我们可能会使用2个不同的步骤和决策器来解决这个问题。