以下是阅读器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>需要提及IO,或者我必须以某种方式进行切换或创建自定义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

09-10 16:16