if语句中的Spel错误(xml配置)

dim*_*zak 1 xml spring spring-batch spring-el

我试图spel if statement在xml配置中使用但没有成功:

xml的一部分:

<bean id="ExportReader"
                class="org.springframework.batch.item.file.MultiResourceItemReader"
                scope="step">
                <property name="resources" value="#{jobParameters['isIncremental'] eq 1? '${step3.index.incremental.folder}/#{stepExecutionContext['fileName']}/*.xml' : true }">
                <property name="delegate" ref="staxPatentReader"></property>
                <property name="strict" value="true"></property>
        </bean>
Run Code Online (Sandbox Code Playgroud)

${step3.index.incremental.folder}工作=>解析为C:/,但第二部分失败,所以我喜欢的资源C:/#{stepExecutionContext['fileName']}/*.xml

我想有一个问题是逃避单引号...

另一件事是这个xml工作正常:

<bean id="indexFolderPartitioner"class="com.mycompany.FolderPartitioner" scope="step">
                <property name="folder" value="#{jobParameters['isIncremental'] eq 1? '${step3.index.incremental.folder}' : '${step3.index.full.folder}' }"></property>
        </bean>
Run Code Online (Sandbox Code Playgroud)

Art*_*lan 5

由于它是一个SpEL,因此它具有一些带有一些变量的评估上下文.它是一个有效的Java(几乎)表达式.

这应该工作:

<property name="resources" value="#{jobParameters['isIncremental'] eq 1? '${step3.index.incremental.folder}/' + stepExecutionContext['fileName'] + '/*.xml' : true }">
Run Code Online (Sandbox Code Playgroud)

在这种情况下,jobParametersstepExecutionContext是EvalCtx变量,因此您应该按原样使用它们.

#{是SpEL的开始,}- 结束.简而言之,您不能像在样本中显示的那样使用子SpEL.

由于您要从SpEL获取字符串值,并且某些部分是从PropertyPlaceholder解析的,因此您应该在这些部分和那个部分之间使用字符串连接,这应该在运行时针对步骤评估上下文进行解析.

注意,属性占位符在启动阶段得到解析,因此它们只是运行时目标SpEL的文字.