【问题标题】:How can I reload the message updates in the messages.properties using Grails Localization plugin?如何使用 Grails 本地化插件重新加载 messages.properties 中的消息更新?
【发布时间】:2015-03-31 18:32:43
【问题描述】:

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

如果您以 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 发生在加载过程的中间,而不是之前!

【问题讨论】:

    标签: grails


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我们可以在BootStrap.groovy什么都不做,但是通过在conf 下创建LocalizationsBootStrap.groovy覆盖它:

      import org.grails.plugins.localization.*
      class LocalizationsBootStrap {
          def sessionFactory
          def init = { servletContext ->
              sessionFactory.getCurrentSession().createSQLQuery('truncate table localization').executeUpdate()
              Localization.load()
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 2014-01-29
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        相关资源
        最近更新 更多