【问题标题】:Splitting configuration in Grails 3Grails 3 中的拆分配置
【发布时间】:2017-01-15 14:52:33
【问题描述】:

我目前正在将现有的 grails 2.5.x 应用程序迁移到 grails 3.1。

在以前的 grails 版本中,我真正喜欢的是可以使用 grails.config.locations 选项将我的配置文件模块化到多个文件中,例如:

Config.groovy
App.groovy
Logging.groovy
SpringSecurity.groovy
Quartz.groovy
...

由于 grails 3 现在基于 Spring Boot,它使用了不同的配置方法。但我想不出办法从多个文件中加载我的配置。

我在春季阅读了有关 spring.config.location 选项的信息,但它似乎并没有达到我想要的效果。它似乎在不同的位置搜索 application.groovy/application.yml,但这并没有让我恢复拆分的配置文件。

而且我也不喜欢这个选项必须设置为环境参数的事实。应用程序无需配置额外的环境变量或参数即可正常工作。

这引出了我的问题:

  • 是否可以恢复以前 grails 版本的配置可能性?
  • grails 或 spring boot 中是否有其他方法可以实现类似的功能?

【问题讨论】:

    标签: grails spring-boot configuration


    【解决方案1】:

    spring.config.location 会将另一个配置文件与您的 Grails 配置合并,而不是覆盖它。我们在部署在多个服务器上的应用程序中使用它来覆盖随应用程序部署的 application.yml 中的默认值 - 我们只包含针对该特定部署而不同的键。

    一个可能的问题是不能以这种方式覆盖数据库配置。我们通过将数据库配置设置放入环境变量(例如export DATABASE_URL=fooexport DATABASE_USERNAME=bazexport DATABASE_PASSWORD=bar)然后在我们的配置中使用占位符来解决这个问题,如下所示:

    environments:
        production:
            dataSource:
                url: ${DATABASE_URL}
                username: ${DATABASE_USERNAME}
                password: ${DATABASE_PASSWORD}
    

    这个数据库配置部分有点老套,想一想“3 个 yaml 文件合并为一个”的全部原因并没有得到很好的论证,但这是我们设法想出的最好的。

    【讨论】:

      【解决方案2】:

      现在有一个 Grails 3 插件可以模仿 Grails 2 中处理配置文件的方式:

      http://plugins.grails.org/plugin/grails/external-config

      【讨论】:

        猜你喜欢
        • 2020-07-08
        • 2016-07-04
        • 1970-01-01
        • 2017-12-02
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2023-04-08
        相关资源
        最近更新 更多