如何告诉Grails应用程序它所处的环境?

Ste*_*lth 8 grails grails-config grails-2.0

我想在我的grails应用程序中加载特定于环境的配置,以便根据运行grails应用程序的JVM,我可以指向特定于环境的URL.在我的情况下,当我的应用程序从dev变为prod时,我有4种不同的环境可供使用(而不是grails app假定的默认值3).

我的JVM都定义了一个System属性,当我执行"System.getProperty()"时,告诉我运行该应用程序的环境.

我的问题是,在运行时检查和加载特定于环境的配置的最佳位置是什么?在BootStrap.groovy里面?我没有使用命令行或grails {env_name} war来构建war文件的选项.

谢谢.

Joe*_*Joe 16

将变量grailsEnv设置为以下Tomcat的环境Java变量是一个示例:

set CATALINA_OPTS=%CATALINA_OPTS% -Xms256m -Xmx1024m -Dgrails.env=development
Run Code Online (Sandbox Code Playgroud)

在grails命令行上添加环境变量:

grails run-app -Dgrails.env=stage
Run Code Online (Sandbox Code Playgroud)

您可以使用检查环境变量,如下所示:

    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)
    }
Run Code Online (Sandbox Code Playgroud)

您可以使用枚举值而不是名称变量,但如果使用自定义环境值,则它们将映射到枚举自定义,并使用名称来区分自定义值.

   if (grails.util.Environment.current == grails.util.Environment.DEVELOPMENT) {
Run Code Online (Sandbox Code Playgroud)


fou*_*guy 5

不设置JVM启动参数:

-Dgrails.env=whatever
Run Code Online (Sandbox Code Playgroud)

您的grails应用将使用中设置的值

<yourapp>/WEB-INF/classes/application.properties
Run Code Online (Sandbox Code Playgroud)

会有一个这样的值集:

grails.env=development
Run Code Online (Sandbox Code Playgroud)

此默认环境值由建立战争时使用的选项决定。您可以与建立战争

-Dgrails.env=development war
Run Code Online (Sandbox Code Playgroud)

然后application.properties将具有grails.env = development,如果您不选择它,则默认为grails.env = production

就您的问题而言,您不确定要配置为使用“特定于环境的网址”的内容。目前尚不清楚如何存储这些特定于环境的URL。例如,如果URL变量是Grails服务的成员变量,并且您将特定于环境的URL存储在Config.groovy中,则可以

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
}
Run Code Online (Sandbox Code Playgroud)

Config.groovy在哪里

PRODUCTION_URL = "http://blah.com/blah/"
DEVELOPMENT_URL = "http://blah.dev/blah"
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。