【问题标题】:Grails - override message bundle property at runtimeGrails - 在运行时覆盖消息包属性
【发布时间】:2013-12-17 12:17:32
【问题描述】:

有没有办法在运行时覆盖消息包中定义的属性值?

我的 grails 应用程序在 messages.properties 文件中包含一个属性:

page1.para1.text=Some text to display to the user

我的 Config.groovy 定义了以下配置位置:

grails.config.locations = [ "file:${userHome}/.myApp/myApp-config.properties" ]

我目前使用这种方法来覆盖 Config.groovy 属性(如数据库连接等),但它不适用于消息包属性。

我希望/期望只是确保 myApp-config.properties 文件包含我的新属性值,重新启动部署我的应用程序的 Tomcat 服务器,它将被拾取并显示在我的页面上:

page1.para1.text=Some DIFFERENT text to display to the user

关于内部化/消息包 grails i18n 的 Grails 文档并未说明这是否可行。

显然,我正在尝试实现此更改,而无需重新编译和重新交付我的 Grails 应用程序。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 这是什么原因?
  • 通常的原因:上线后需求发生了变化!

标签: grails


【解决方案1】:

当您已经上线并且不想创建新的 .war 文件时:

我不确定,但可以在服务器上找到解压缩的 .war 文件。您可能会尝试直接在服务器上替换消息文件,但可能需要重新启动应用程序。但我不建议这样做。

如果您需要在运行时经常更改消息包,我想将它们存储在数据库中是有意义的。但这意味着您必须稍微更改代码并重新部署一次。有一个博客条目描述了如何做到这一点:http://graemerocher.blogspot.de/2010/04/reading-i18n-messages-from-database.html 另一个 SO 问题处理您想要将更改存储到数据库中的消息但回退到文件的情况: Grails i18n From Database but Default Back To File

【讨论】:

  • 我已经接受了这个答案,因为在我的场景中,更改解压缩的 Tomcat webapps 文件夹中的 messages.properties 文件并重新启动服务器非常简单。我真的不需要实现 db 解决方案,但无论如何感谢您的链接。
【解决方案2】:

理论上,您应该能够在 Resources.groovy 中将 messageSource bean 替换为 ReloadableResourceBundleMessageSource。这样,您不仅可以将其指向一个新位置,还可以将它们声明为缓存值的失效频率。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2014-10-28
    • 2013-09-07
    • 2016-01-16
    相关资源
    最近更新 更多