我在appContext.xml中有这个
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:pathTo/service.properties</value>
<value>file:pathTo/configuration.properties</value>
</list>
</property>
</bean>
我正在用
设置一个字符串@Value("${myServiceKey}")
private String url;
那可以,我在网址中获得了myServiceKey的值。
但我想在myServiceKey不存在时使用默认值,所以我尝试了这个
@Value("${myServiceKey:defaultValue}")
private String url;
并且它始终设置“defaultValue”而不是正确的“myServiceKey”。
我也意识到使用这个:
@Value("#{systemProperties['myServiceKey']}")
private String url;
我有一个例外
WARN MSF4JMessageProcessor:262 - Unmapped exception -java.lang.IllegalArgumentException: URI must not be null
这有关系吗?怎么了??
我正在使用spring版本4.3.9.RELEASE
提前致谢。
答案 0 :(得分:0)
我不认为MSF4JMessageProcessor:262 - Unmapped exception -java.lang.IllegalArgumentException: URI must not be null
与您的问题有关。
我们一直使用默认值没有任何问题。刚试图设置一些例子
mail.properties
smtp.port=587
myServiceKey=s3cr3t
user.dir=D:\Java
控制器类:
@Controller
public class HelloWorldController {
@Value("${myServiceKey: H3ll0W0rld}")
private String myServiceKey;
...
@RequestMapping("/index")
public String index(){
System.out.println("myServiceKey = "+myServiceKey);
...
}
}
此代码正确打印myServiceKey =s3cr3t
。当我按如下方式更新mail.properties
时,
smtp.port=587
user.dir=D:\Java
打印myServiceKey =H3ll0W0rld
答案 1 :(得分:0)
最后我发现了问题,我在PropertyPlaceholderConfigurer中有多个属性。 我在https://jira.spring.io/browse/SPR-9989
中找到了它 建议的我将PropertyPlaceholderConfigurers分成两个不同的并将其中一个添加到属性valueSeparator
<property name="valueSeparator" value="="/>
然后我像这样设置默认值:
@Value("${myServiceKey= H3ll0W0rld}")
现在它有效。希望它可以帮助别人。