Java 基于作业参数的动态切换ItemProcessor
下面是读卡器bean的代码示例Java 基于作业参数的动态切换ItemProcessor,java,spring,spring-batch,Java,Spring,Spring Batch,下面是读卡器bean的代码示例 <bean id="reader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step"> <property name="dataSource" ref="dataSource" /> <property name="sql" value="#{@sqlStat
<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>
它为jobParameters提供了org.springframework.expression.spel.SpelEvaluationException,可能是因为没有为它定义scope=step
有人可以提供一个替代方案吗?我不确定是否完全按照您的问题进行操作,但一个简单的解决方案是创建一个自定义处理器作为委托人。此委托人将根据作业参数键或您想要的任何逻辑,将处理器代码委托给相关的项目处理器类。不确定我是否完全遵循您的问题,但一个简单的解决方案是创建一个自定义处理器作为委托人。此委托器将根据作业参数键或您想要的任何逻辑,将处理器代码委托给相关的项目处理器类。使用可简化此问题的大量解决方案:创建自定义项目处理器并在项目处理器中插入分类器。进程使用分类器检测正确的处理器。 另请看。使用a可以简化此问题的许多解决方案:创建一个自定义ItemProcessor并在ItemProcessor中插入一个分类器。进程使用分类器检测正确的处理器。
另请看。这样的ItemProcessor是从3.0开始由框架提供的:这样的ItemProcessor是从3.0开始由框架提供的:
<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>