获取 Grails 2.* 中其他环境的配置

Get config of other environment in Grails 2.*

我是 运行 Grails 2.1.1,我正在寻找一种方法来获取生产环境中变量集的值,而我 运行 在测试环境中。 配置文件:

development {
  config.url = "http://local"
}
test {
  config.url = "http://test.lan"
}
production {
  config.url = "http://prod.lan"
}

我知道获取配置变量的唯一方法是 grailsApplication.config.url

查看Holders: https://gist.github.com/mathifonseca/ab443f1502bfd9461943

import grails.util.Holders

class FooService {

     def foo() {

          def devUrl = Holders.config.url

          assert devUrl == "http://local"     
     }

}

标准配置设置仅查看当前环境。 HoldersgrailsApplication 具有相同的当前配置。您必须再次 slurp 配置。尝试使用 ConfigurationHelper。下面是 spock 测试。 (注意有时加倍的 config.config 是因为第一个 config 是 属性(或 getConfig() 方法的简称)并且您的密钥包含第二个 config。 )

import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Specification

import org.codehaus.groovy.grails.commons.cfg.ConfigurationHelper

@TestMixin(GrailsUnitTestMixin)
class ConfigSpec extends Specification {

    void "test prod config"() {
        def configSlurper = ConfigurationHelper.getConfigSlurper('production',null)
        def configObject = configSlurper.parse(grailsApplication.classLoader.loadClass(grailsApplication.CONFIG_CLASS))

        expect:
        configObject.config.url == "http://prod.lan"
    }

    void "test dev config"() {
        def configSlurper = ConfigurationHelper.getConfigSlurper('development',null)
        def configObject = configSlurper.parse(grailsApplication.classLoader.loadClass(grailsApplication.CONFIG_CLASS))

        expect:
        configObject.config.url == "http://local"
    }

    void "test grailsApplication config"() {
        expect:
        grailsApplication.config.config.url == "http://test.lan"
    }

    void "test Holders config"() {
        expect:
        grails.util.Holders.config.config.url == "http://test.lan"
    }

}