【问题标题】:How to prevent Spring from performing variable replacement如何防止Spring执行变量替换
【发布时间】:2021-05-22 15:35:53
【问题描述】:

我有一个配置属性需要作为帖子正文的一部分发送到另一个系统。

比如说,如果有一个 application.properties 文件包含

my.property.raw=${parameter:some-identifier}

我还有一个可能看起来像这样的@ConfigurationProperties 注释类

@ConfigurationProperties(prefix = "my.property")
public class Properties {
    private String raw;
    
    // getters and such
}

我遇到的问题是 Spring 将看到 ${parameter:some-identifier} 并立即假定我希望它被注入一个属性名称“参数”,如果它不存在,则输入“一些标识符”。我试图将属性设置为${parameter:${parameter:some-identifier}},但 Spring 似乎已经考虑了递归属性注入,它仍然显示为“some-identifier”。

我知道我可以围绕它编写一些代码并将“:”替换为其他内容并在事后将其更改回来,但我试图在不更改任何代码的情况下使其工作。

总而言之,Spring boot 将其视为配置属性 ${parameter:some-identifier} 在注入到 ConfigurationProperties 注释类时,值最终为 some-identifier。我想要发生的是在 Spring 执行其变量替换过程之后 Properties 类中的值是${parameter:some-identifier},因为这种可注入的值格式适用于期望该格式的下游系统。最好不要更改任何代码。也许我可以使用一些特殊的格式来告诉 spring 忽略这个特定的属性。

感谢您的宝贵时间!是的,我意识到这可能与人们通常对 Spring 的期望相反。

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

正如@Kayaman 所说,这确实是 Escape property reference in Spring property file

我从那里得到的解决方案,经过一些修改,是这样的:

${dollar:$}{parameter:some-identifier}

https://stackoverflow.com/a/48897422/4621716

我这样做是因为除了更改现有值之外,我也无法控制生成该 application.properties 的过程。

我希望这会有所帮助,我希望我能给@Kayaman 指点我正确的方向,但我想我会接受我自己的答案。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多