【问题标题】:Make Spring replace placeholders in different file type (other than Spring's configs)使 Spring 替换不同文件类型的占位符(除了 Spring 的配置)
【发布时间】:2011-04-24 07:39:20
【问题描述】:

有没有办法让 spring (v.3.0) 解析不是.properties 的文件中的占位符? 我知道我可以自己写PropertyPlaceholderConfigurer,但我一直在寻找一种“更干净”的方式来做到这一点。

编辑:

更具体地说,我真正想做的是替换 .sql 文件中的占位符。因此占位符的值存储在.properties 中,但占位符在.sql 文件中使用。

【问题讨论】:

  • 你认为什么比 PropertyPlaceholderConfigurer 更“干净”?
  • @GaryF - 我认为@Drahakar 指的是 PropertyPlaceholderConfigurer 仅适用于 bean 定义的事实,因此要使用它,他需要将他的 SQL 嵌入到 bean 定义文件中。

标签: java spring properties placeholder


【解决方案1】:

PropertyPlaceholderConfigurer bean 将替换其他 bean 定义中的占位符。具体来说,它会在实际创建 bean 之前更新 bean 定义中的 bean 属性值。因此,如果您想使用PropertyPlaceholderConfigurer 修改 SQL,则需要将该 SQL 嵌入到 bean 属性值中。此类不能替换任意文件中的属性。

如果您想替换任意文件中的占位符,PropertyPlaceholderHelper 类是更好的选择。比如方法

String replacePlaceholders(String value, Properties properties)

value 中的占位符替换为来自properties 的属性,返回重写后的字符串。您可以轻松地调整/包装它以替换文件中的占位符。

【讨论】:

    【解决方案2】:

    PropertyPlaceholderConfigurer 可以提供任意的Properties 对象(通过properties 属性)。

    【讨论】:

    • +1,然后你可以使用 commons-configuration 来加载你想要的任何格式。
    • +1 - 我已经(ab-)使用 PPC 好几个月了,但我没有注意到这个功能。
    【解决方案3】:

    我不知道你是否使用 maven,但如果使用,我会使用 resource filtering 在部署时将属性注入 sql 文件(ant 也有类似的解决方案)并让 Spring 的 @ 987654322@ 在运行时使用相同的属性文件。这样一来,一切都在它所属的地方(毕竟,属性的最佳位置是 .properties 文件)。

    【讨论】:

    • 这不是部署时间。这是 WAR 文件构建时间。
    • 真的。我想我的意思是执行 mvn deploy 的意义上的部署
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多