【问题标题】:How do I escape ":" in Spring PropertyPlaceHolder如何在 Spring PropertyPlaceHolder 中转义“:”
【发布时间】:2018-08-10 19:49:58
【问题描述】:

我需要指定一个可选的 jvm 参数,如下所示:

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

但由于第二个“:”,它不起作用。

有人可以帮我吗?

上下文:Spring 3.12。

【问题讨论】:

  • 我认为您必须重新考虑您的方法,因为 JVM 参数应该在 JVM 启动之前传递,但是 spring 属性读取意味着已启动应用程序的设置。为什么不使用通过 ApplicationRunner 和 ApplicationArguments 传递的普通 jvm 参数?
  • 谢谢亚历克斯。这只是一种情况,可能还有另一种情况。但是,无论如何,使用或属性文件是 Spring 正确应用 @PropertySource 的一个特性,而且,作为一个优点,我们可以使用可选参数,我们可以使用 jvm 参数作为输入。我认为我的方法没有任何问题。我在没有“:”的情况下成功使用它至少 4 年。我所需要的只是一个可选参数,它可以在文本中包含“:”,但我不知道如何做到这一点。 ":" 表示:":" 之后的可选值,用于 jvm 属性解析。

标签: spring property-placeholder


【解决方案1】:

我认为,巧合的是,我的依赖来自“类路径:”,它可以通过以下方式工作:

@PropertySource({ "${config.file:config-file.properties}" })

Spring 假设如果一个 PropertySource 或一般的任何 spring 资源在没有协议的情况下被指定为“file:”或另一个,那么该资源是相对于类路径的。

所以我可以有一个属性为“-Dconfig.file=another-one.properties”,或者如果我不提供这个属性,我的默认值是我想要的相对于类路径的“config-file.properties”。

这暂时解决了我的问题。

我希望 Spring 4 能够解析“:”的解析器,正如许多其他帖子中所写的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2014-05-09
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多