1

我在使用 Spring SpEL 来评估 @Value 注释中的 if-then-else 构造时遇到问题:


1. 我的 config.xml 文件:

<context:annotation-config />

<context:property-placeholder location="file://${HOME}/maven.props/${USER}.properties" properties-ref="props" />


<bean id="props" class="java.util.Properties">
    <constructor-arg>
        <props>
            <prop key="interfaceName">createupdateproduct</prop>
            <prop key="destImportFilesDirectoryPath">${batch.job.import.zipDestinationPath}/${interfaceName}/imported</prop>
            <prop key="sourceImportFilesDirectoryPath">${batch.job.import.sourceImportPath}/${interfaceName}/import</prop>
            <prop key="reportDirectoryPath">${batch.job.import.reportPath}/createupdateproduct/report</prop>
        </props>
    </constructor-arg>
</bean>

2.在我的bean中,我有:

@Value("#{jobParameters['destFile']} ?: ${destImportFilesDirectoryPath}")
private String destImportFilesDirectoryPath;

问题。如果 bean jobParameters['destFile'] 为空,我想切换到占位符值。jobParameters 是 Spring Batch 放入上下文中的 bean。

前面的代码片段不能正常工作,但 #{jobParameters['destFile']} 和 ${destImportFilesDirectoryPath} 都被正确评估:O

我尝试不同的解决方案,例如:

@Value("#{jobParameters['destFile']} != null ? #{jobParameters['destFile']} : ${destImportFilesDirectoryPath}")

或者

@Value("#{ org.apache.commons.lang.StringUtils.isNotEmpty(#{jobParameters['destFile']}) ? #{jobParameters['destFile']} : ${destImportFilesDirectoryPath} }")

或者

@Value("${ #{jobParameters['destFile']} ?: ${destImportFilesDirectoryPath} }")

但没有任何工作正常!

4

2 回答 2

1

@Value("#{jobParameters['destFile'] ?: props['destImportFilesDirectoryPath']}") 

解决方案不起作用:如果 ("#{jobParameters['destFile']} 被 valorized,它的值被分配,否则它在字符串属性中分配 null 值。

我也尝试过以下解决方案,但没有成功:

 @Value("file:#{jobParameters['destFile'] ?: T((java.util.Properties)props).getProperty('destImportFilesDirectoryPath')}")

为了区分批处理作业,我使用其他参数,如用户、互操作性接口名称等。

于 2013-11-07T10:22:27.800 回答
0

如果你想使用 spEL 试试

@Value("#{jobParameters['destFile'] ?: props['destImportFilesDirectoryPath']}")

'destFile'但是,IMO,最好的选择是在开始工作之前填写正确的值。

另外我有一个(也许是愚蠢的)问题:
工作参数用于以独特的方式识别工作;您确定要存储'null'为作业参数值并在运行时更改它吗?如果您第二次运行作业会发生什么?

于 2013-11-06T16:21:43.670 回答