使用@value中的bean和占位符弹出拼写if-then-else

时间:2013-11-06 11:49:51

标签: java spring spring-batch spring-annotations

我有一个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}")

OR

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

OR

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

但没有正常工作!

2 个答案:

答案 0 :(得分:1)

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

解决方案不起作用:if(“#{jobParameters ['destFile']}被赋值,其值被赋值,否则它在字符串属性中赋值为null。

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

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

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

答案 1 :(得分:0)

如果您想使用spEL,请尝试

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

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

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