Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于作业参数的动态切换ItemProcessor_Java_Spring_Spring Batch - Fatal编程技术网

Java 基于作业参数的动态切换ItemProcessor

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的代码示例

<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>