spring systemProperties key- IllegalArgumentException:KEY不能为null

时间:2018-02-06 23:17:49

标签: java spring annotations

我在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

提前致谢。

2 个答案:

答案 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

中找到了它

它为我工作的解决方案是Spring Boot : Spring always assigns default value to property despite of it being present in .properties file

建议的

我将PropertyPlaceholderConfigurers分成两个不同的并将其中一个添加到属性valueSeparator

<property name="valueSeparator" value="="/>

然后我像这样设置默认值:

@Value("${myServiceKey= H3ll0W0rld}")

现在它有效。希望它可以帮助别人。