如何使用Grails Localization插件在messages.properties中重新加载消息更新?

时间:2015-03-31 18:32:44

标签: grails

在Grails本地化插件documentation中,它说:

  

如果您以war文件的形式分发已完成的应用程序,那么除非目标应用程序服务器在安装时解压缩war文件,否则本地化插件将无法自动加载(或随后导入' )war文件中的属性文件。

为了使用war重新加载所有邮件更新,我在BootStrap.groovy中使用以下代码。

import org.grails.plugins.localization.Localization

class BootStrap {
    def init = { servletContext ->
        Localization.reload()
    }
}

此代码确实帮助我,只要应用程序部署到Tomcat服务器,就会应用消息更新。但随着越来越多的版本部署,本地化表的ID号会自动增加。

所以我试过"截断表"在我的代码中解决问题。在BootStrap.groovy

import org.grails.plugins.localization.Localization

class BootStrap {
    def sessionFactory
    def init = { servletContext ->
        sessionFactory.getCurrentSession().createSQLQuery('truncate table localization').executeUpdate()
        Localization.load()
    }
}

使用此代码导致run-app失败,因为有时truncate table发生在加载过程的中间,而不是之前!

2 个答案:

答案 0 :(得分:0)

您是否尝试将其作为线程执行并强制等待该过程的结束?

答案 1 :(得分:0)

本地化插件有一个LocalizationsBootStrap.groovy。在BootStrap.groovy中编写代码会导致两个BootStrap文件之间的争用。

我们可以在BootStrap.groovy不执行任何操作,但在LocalizationsBootStrap.groovy下创建{<1>} 覆盖

conf