我在使用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.在我的豆子中,我有:

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




题。如果bean jobParameters ['destFile']为null,我想切换到占位符值。 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} }")

但没有正确的工作!

最佳答案



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


解决方案不起作用:如果(“#{jobParameters ['destFile']}被定值,则分配其值,否则在string属性中分配空值。

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

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


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

08-27 15:51