我在使用 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} }")
但没有任何工作正常!