我们如何在开发和生产模式下做到这一点。
your-application/
conf/
dev/
qa/
prod/
grails-app/
conf/
Config.groovy
grails-app 目录下的 Config.groovy:
environments {
development {
grails.logging.jul.usebridge = true
grails.config.locations = [
"file:conf/dev/XXXConfig.groovy",
"file:conf/dev/XXXDataSource.groovy",
"file:conf/dev/XXXLog4JConfig.groovy",
"file:conf/dev/plugins/XXXSecurityConfig.groovy",
]
}
production {
grails.logging.jul.usebridge = false
grails.config.locations = [
"classpath:XXXConfig.groovy",
"classpath:XXXDataSource.groovy",
"classpath:XXXLog4JConfig.groovy",
"classpath:plugins/XXXSecurityConfig.groovy",
]
}
}
对于应用程序服务器(Tomcat、Websphere 等)中的部署,您只需将配置文件所在的目录添加到类路径。当您在类路径中有配置文件目录时,一切正常。
例如,我们运行 Tomcat 并具有将配置目录导出到类路径的启动脚本。
对于 Grails 3.x,我写了对这个 grails.config.locations 的支持,因为他们删除了这个特性,我不想改变我们做配置的方式。所以把你的 grails.config.locations -configurations 放到 grails-app/conf -directory 中的 application.groovy 中。
import org.grails.core.io.DefaultResourceLocator
import org.springframework.core.env.Environment
import grails.boot.config.GrailsAutoConfiguration
import org.springframework.core.env.MapPropertySource
class ApplicationConfigurationLoader {
private ApplicationConfigurationLoader() {}
public static load(GrailsAutoConfiguration application, Environment environment) {
if (application && environment) {
DefaultResourceLocator resourceLocator = new DefaultResourceLocator()
def applicationGroovy = application.getClass().classLoader.getResource('application.groovy')
if (applicationGroovy) {
def applicationConfiguration = new ConfigSlurper(grails.util.Environment.current.name).parse(applicationGroovy)
for (String configLocation in applicationConfiguration.grails.config.locations) {
def configurationResource = resourceLocator.findResourceForURI(configLocation)
if (configurationResource) {
def config = new ConfigSlurper(grails.util.Environment.current.name).parse(configurationResource.getURL())
environment.propertySources.addFirst(new MapPropertySource(configLocation, config))
}
}
}
}
}
}
在你的 grails-app/init 文件夹中你有你的 Application.groovy
import grails.boot.GrailsApp
import grails.boot.config.GrailsAutoConfiguration
import org.springframework.core.env.Environment
import org.springframework.context.EnvironmentAware
import com.bcbmedical.bfw.core.util.ApplicationConfigurationLoader
class Application extends GrailsAutoConfiguration implements EnvironmentAware {
static void main(String[] args) {
GrailsApp.run(Application, args)
}
@Override
void setEnvironment(Environment environment) {
ApplicationConfigurationLoader.load(this, environment)
}
}