【问题标题】:how to define several production environments in grails如何在grails中定义多个生产环境
【发布时间】:2015-08-03 15:38:10
【问题描述】:

我知道你可以为 grails 创建几个自定义环境。

我的问题是我希望这些自定义环境用于生产模式(每个部门的每个环境都有不同的数据库和配置)。

有什么特殊的方式来定义它们吗?如果我按原样部署它们,战争将是高效的还是测试战争?

谢谢

【问题讨论】:

  • 您应该改用外部配置。允许各个部门配置应用程序。这在之前已经讨论过很多次了,甚至在 Grails 文档中。外部配置。这个问题的最佳解决方案。
  • 谢谢约书亚!您的解决方案非常完美!请把它作为答案,以便我可以接受它给未来的读者。
  • 根据您的要求添加答案。

标签: grails


【解决方案1】:

解决此问题的正确方法是使用Externalized Configuration

通过这样做,您可以让每个部门灵活地为他们的环境配置您的应用程序,并且您不需要为每个部门打包您的应用程序。

【讨论】:

    【解决方案2】:

    我没有完整的解决方案,但我会分享我所知道的。

    ServletContext 提供了可以在应用程序之外设置的init 参数。然后 servlet 容器使它们可用于应用程序/上下文。返回这些参数的方法称为initParameterNames()

    例如,假设我正在使用 Tomcat 8 运行应用程序,并且该应用程序名为 example-app。要设置一些 init parameters 我会创建文件 $CATALINA_BASE/conf/Catalina/localhost/example-app.xml

    在文件中,我会像这样保存我的参数:

    <Context>
        <Parameter name="environments.production.dataSource.url" value="jdbc:h2:anotherProdDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE" override="true" />
    </Context>
    

    通过 Grails,我可以从 ServletContext 访问该值。例如,从 GSP 中,我可以读取如下值:

    application.getInitParameter('environments.production.dataSource.url')
    

    理想情况下,我会在启动过程的早期将 init 参数 与 Grails 配置 (grailsApplication.config) 合并,以便 init 参数 覆盖 Grails 配置。但我不知道该怎么做。可以从 GrailsAutoConfiguration 访问 Grails 配置(并且显然可以修改),如下所示:

    import grails.boot.GrailsApp
    import grails.boot.config.GrailsAutoConfiguration
    import grails.boot.config.GrailsApplicationPostProcessor
    import grails.core.GrailsApplication
    
    class Application extends GrailsAutoConfiguration {
        static void main(String[] args) {
            GrailsApp.run(Application, args)
        }
    
        GrailsApplicationPostProcessor grailsApplicationPostProcessor() {
            def processor = super.grailsApplicationPostProcessor()
    
            processor.grailsApplication.config.setAt('environments.production.dataSource.url', 'testing...')
    
            return processor
        }
    }
    

    但我不知道如何访问 grailsApplicationPostProcessor() 中的 ServletContext 以便使用 init 参数覆盖 Grails 配置。

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      相关资源
      最近更新 更多