Grails - 在运行时覆盖消息包属性

时间:2013-12-17 12:17:33

标签: grails

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

我的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应用程序。

有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分: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

HTH

答案 1 :(得分:0)

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