您是正确的,从grails.config.locations
文件(groovy 或属性)读取的属性仅在读取主文件后才应用Config.groovy
。您可以使用自定义环境,并拥有类似的东西
environments {
ldapAuth {
foo.bar = 'something'
}
daoAuth {
foo.bar = 'something else'
}
}
但是您必须在构建 WAR 时指定环境,您不能构建一个 WAR,然后在运行时将其配置为不同的环境。
如果您有某种方法可以为运行 WAR 的 tomcat(或其他)指定系统属性,那么您可以执行类似的操作
def authType = System.getProperty('myapp.auth.type', 'dao')
// store authType as a real config option as well as a local variable
auth.type = authType
switch(authType) {
case 'dao':
foo {
bar = 'something'
}
break
case 'ldap':
foo {
bar = 'something else'
}
break
default:
println "Unrecognised auth type ${authType}"
}
或者自己手动读取.properties
文件(而不是依赖grails.config.locations
)
def authProps = new Properties()
new File('/etc/myapp/auth.properties').withInputStream(authProps.&load)
def authType = authProps.getProperty('auth.type', 'dao')
auth.type = authType
// switch(authType) as before
一个皱纹 - 在log4j
闭包中,您可能会发现您无法访问该authProps
变量(我不知道,我没有尝试过)。但是,在该闭包中,您可以访问完整的配置config
,因此,只要您有auth.type = authType
我在上面使用的行,您就可以config.auth.type
改为说。