如何防止spring执行变量替换

qv7cva1a  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(201)

我有一个配置属性,需要作为post主体的一部分发送到另一个系统。
例如,假设有一个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”,如果它不在那里,则放入“some identifier”。我已经试着把房子改成 ${parameter:${parameter:some-identifier}} 但spring似乎已经考虑了递归属性注入,它仍然是“一些标识符”。
我知道我可以为此编写一些代码,并用其他东西替换“:”,然后在事后将其更改回来,但我正在尝试在不更改任何代码的情况下使其正常工作。
总之,SpringBoot将此视为一个配置属性 ${parameter:some-identifier} 在注入到configurationproperties注解类中时,值最终是 some-identifier . 我想要的是在spring执行变量替换过程后properties类中的值 ${parameter:some-identifier} 因为值的这种可注入格式是为期望该格式的下游系统设计的。最好不改变任何代码。也许我可以用一些特殊的格式告诉spring忽略这个特定属性。
谢谢你的时间!是的,我意识到这可能与人们通常想要的Spring相反。

1mrurvl1

1mrurvl11#

正如@kayaman所说,这确实是spring属性文件中escape属性引用的副本
我从那里得到的解决方案,经过一些修改,是这样的: ${dollar:$}{parameter:some-identifier} https://stackoverflow.com/a/48897422/4621716
我这样做是因为除了更改现有值之外,我也无法控制生成application.properties的进程。
我希望这能有所帮助,我也希望我能给@kayaman一个荣誉,因为它为我指明了正确的方向,但我想我会接受我自己的答案。谢谢。

相关问题