以下是阅读器Bean的代码示例
<bean id="reader"
class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step">
<property name="dataSource" ref="dataSource" />
<property name="sql"
value="#{@sqlStatements[jobParameters['key']]}" />
<property name="rowMapper" ref="#{jobParameters['key'] + 'Mapper'}" />
</bean>
有
<util:map id="sqlStatements"/>
。我有一个类似的作家豆。我想要一个用于处理器的动态切换器。接口ItemProcessor<I,O>
需要提及I
和O
,或者我必须以某种方式进行切换或创建自定义ItemProcessor。我尝试了下面的代码,但是没有用。
<batch:job id="springBatch">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="reader" processor="#{jobParameters['key'] + 'Processor'}"
writer="writer" commit-interval="1"></batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
它为jobParameters提供了
org.springframework.expression.spel.SpelEvaluationException
,可能是因为未为其定义scope=step
的原因。有人可以为此提供替代方法吗?
最佳答案
使用Classifier
可以大大简化此问题的解决方案:创建一个自定义的ItemProcessor<Object, Object>
并注入一个Classifier<Class, ItemProcessor>
(一个PatternMatchingClassifier
可以容纳)并在ItemProcessor.process()
中使用分类器检测正确的处理器。
另请参阅ClassifierCompositeItemWriter
。