我想在我的grails应用程序中加载特定于环境的配置,以便根据运行grails应用程序的JVM,我可以指向特定于环境的URL。在我的情况下,当我的应用程序从dev变为prod时,我有4种不同的环境可供使用(而不是grails app假定的默认值3)。
我的JVM都定义了一个System属性,当我执行“System.getProperty()”时,告诉我该应用程序运行的环境。
我的问题是,在运行时检查和加载环境特定配置的最佳位置是什么?在BootStrap.groovy里面?我没有使用命令行或grails {env_name} war来构建war文件的选项。
感谢。
答案 0 :(得分:15)
将变量grailsEnv设置为Tomcat的环境Java变量,下面是一个示例:
set CATALINA_OPTS=%CATALINA_OPTS% -Xms256m -Xmx1024m -Dgrails.env=development
在grails命令行上添加环境变量:
grails run-app -Dgrails.env=stage
您可以使用检查环境变量,如下所示:
if (grails.util.Environment.current.name == "development") {
UsageCodeDefinition ucd = new UsageCodeDefinition()
ucd.setDescription("UFARSFileUpload Upload Development")
ucd.setFiscalYear("12-13")
ucd.setInstructions("Welcome to UFARSFileUpload Development were Open")
ucd.save(failOnError: true)
}
您可以使用枚举值而不是名称变量,但如果使用自定义环境值,则它们将映射到枚举自定义,并使用名称来区分自定义值。
if (grails.util.Environment.current == grails.util.Environment.DEVELOPMENT) {
答案 1 :(得分:4)
不设置JVM启动参数:
-Dgrails.env=whatever
您的Grails应用将使用
中设置的值<yourapp>/WEB-INF/classes/application.properties
将会设置如下值:
grails.env=development
此默认环境值由构建战争时使用的选项决定。你可以用
建立战争-Dgrails.env=development war
然后application.properties将有grails.env =开发,如果你关闭它,它默认为grails.env = production
就您的问题而言,您并未具体说明使用“特定于环境的网址”的配置。目前尚不清楚如何存储这些特定于环境的网址。例如,如果URL变量是Grails服务的成员变量,并且您要在Config.groovy中存储特定于环境的URL,那么您可以
import grails.util.Environment
...
//inject the GrailsApplication Configuration in Config.groovy
def grailsApplication
//Hold the URL value from Config.groovy
String environmentUrl
...
Environment current = Environment.getCurrent()
if(Environment.PRODUCTION == current) {
environmentUrl = grailsApplication.config.PRODUCTION_URL
} else {
environmentUrl = grailsApplication.config.DEVELOPMENT_URL
}
Config.groovy的地方
PRODUCTION_URL = "http://blah.com/blah/"
DEVELOPMENT_URL = "http://blah.dev/blah"
希望有所帮助。
答案 2 :(得分:1)
如果你有一个可用的System属性告诉你你在哪个环境,你只需在Config.groovy
文件中添加if语句或switch语句,如下所示:
if (System.getProperty("foo") == "myTestEnvironment") {
myConfigSetting = "test"
} else if (System.getProperty("foo") == "myProductionEnvironment") {
myConfigSetting = "production"
}
此解决方案也适用于grails-app/conf
使用groovy ConfigSlurper解析Grails配置文件,这样就可以将可执行代码放在那里而不会出现问题。
答案 3 :(得分:0)
很抱歉这是迟到的,但另一种方法是在BootStrap.groovy中注入配置属性。
例如:
if (currentEnv == Environment.DEVELOPMENT) {
...
grailsApplication.config.some.property = DEVELOPMENT_ENVRIONMENT
...
}
else if (currentEnv == Environment.TEST) {
...
grailsApplication.config.some.property = TEST_ENVIRONMENT
...
}
我最近使用过它并且效果非常好。我们正在使用Grails 2.5.2
答案 4 :(得分:0)
作为其他答案的附录:
您可以使用 Environment.isDevelopmentMode()
或以更简洁的方式 Environment.developmentMode
检查环境是否设置为开发。当您采用仅修改生产设置为默认代码的开发设置的方法时,这很有用。