我在使用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')}")
为了区分批处理作业,我使用其他参数,例如用户,互操作性接口名称等。