有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SpringPropertySource中的java三元运算符似乎不起作用

我使用的是SpringFramework4.2.5,运行的是一个可执行的JAR。我要做的是在配置类上配置@PropertySource,该配置类将:

  1. 从磁盘上的文件加载属性,该文件的路径由系统属性“config”指定。如果该系统属性存在,则在命令行上显示“文件”
  2. 如果“config”为空,则从类路径上的默认属性文件加载属性。未设置“文件”属性

如果我能够在这个实例中使用SpringBoot,这将不是一个问题。我几乎可以做到:

@PropertySource({"classpath:default.properties", "${config.file}"})

除了这样做需要(据我所知)配置。file将被指定为“file:path/to/file”,而不仅仅是“path/to/file”,如果可能的话,我希望避免这样做。因此,我转向SPEL三元运算符,提出了以下内容:

@PropertySource("#{'${config.file}' != '' ? 'file:${config.file}' : 'classpath:default.properties'}")

(以及该主题的一些其他变体),但我最终得到的是属性源试图根据config的存在从以下内容之一加载。文件:

'' != '' ? 'file:' : 'classpath:default.properties'
'my.props' != '' ? 'file:my.props' : 'classpath:default.properties'

这是展开但未计算的字符串。我不确定我是否正确地执行了SPEL或三元运算符(我的赌注在这里),或者@PropertySource是否不会完全计算SPEL。如有任何见解或建议,将不胜感激

更新:

我还尝试使用多个@PropertySource注释,如下所示:

@PropertySource("classpath:default.properties")
@PropertySource(value="${config.file}", ignoreResourceNotFound=true)

这似乎是一种可行的方法,Spring确实尝试处理第二个@PropertySource,但不管使用“file:path/to/file”指定什么file://path/to/file或者简单地说是“path/to/file”,我被告知“类路径资源[value]无法打开,因为它不存在”。根据文档中给出的示例,似乎允许使用非类路径资源,但这不是我看到的行为


共 (0) 个答案