天天看點

Grails環境配置與環境打包

         grails可以配置多個環境,開發、測試、生産環境,隻需要在application.yml中配置即可,打包方式分别為:

          grails dev war

          grails test war

          grails prod war

每個環境配置

Grails支援每個環境配置的概念。目錄中的

application.yml

application.groovy

檔案

grails-app/conf

可以使用YAML或ConfigSlurper提供的文法來使用每個環境配置。作為示例,請考慮

application.yml

Grails提供的以下預設定義:

environments:
    development:
        dataSource:
            dbCreate: update
            url: jdbc:oracle:thin:@114.55.235.233:1540:HSZF
            logSql: true
    test:
        dataSource:
            dbCreate: update
            url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
    production:
        dataSource:
            dbCreate: update
            #jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
            url: jdbc:oracle:thin:@114.55.235.233:1540:HSZF
            properties:
                jmxEnabled: true
                initialSize: 5
                maxActive: 50
                minIdle: 5
                maxIdle: 25
                maxWait: 10000
                maxAge: 600000
                timeBetweenEvictionRunsMillis: 5000
                minEvictableIdleTimeMillis: 60000
                validationQuery: SELECT 1
                validationQueryTimeout: 3
                validationInterval: 15000
                testOnBorrow: true
                testWhileIdle: true
                testOnReturn: false
                jdbcInterceptors: ConnectionState
                defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED      

以上可以用Groovy文法表示

application.groovy

如下:

dataSource {

    pooled = false

    driverClassName = "org.h2.Driver"

    username = "sa"

    password = ""

}

environments {

    development {

        dataSource {

            dbCreate = "create-drop"

            url = "jdbc:h2:mem:devDb"

        }

    }

    test {

        dataSource {

            dbCreate = "update"

            url = "jdbc:h2:mem:testDb"

        }

    }

    production {

        dataSource {

            dbCreate = "update"

            url = "jdbc:h2:prodDb"

        }

    }

}

注意如何在頂層提供通用配置,然後一個environments塊指定每個環境設定的屬性dbCreate和url屬性DataSource。

包裝和運作不同的環境

Grails的指令行具有内置功能,可以在特定環境的上下文中執行任何指令。格式為:

grails <<environment>> <<command name>>

此外,已知有以Grails的3個預設環境:dev,prod,和test為development,production和test。例如,要為test您将運作的環境建立WAR :

grails test war

要定位其他環境,您可以将grails.env變量傳遞給任何指令:

grails -Dgrails.env=UAT run-app

程式化環境檢測

在您的代碼中,例如在Gant腳本或引導類中,您可以使用Environment類檢測環境:

import grails.util.Environment

...

switch (Environment.current) {

    case Environment.DEVELOPMENT:

        configureForDevelopment()

        break

    case Environment.PRODUCTION:

        configureForProduction()

        break

}

每個環境引導

當您的應用程式在每個環境的基礎上啟動時,通常需要運作代碼。為此,您可以使用該grails-app/init/BootStrap.groovy檔案對每個環境執行的支援:

def init = { ServletContext ctx ->

    environments {

        production {

            ctx.setAttribute("env", "prod")

        }

        development {

            ctx.setAttribute("env", "dev")

        }

    }

    ctx.setAttribute("foo", "bar")

}

通用環境執行

前面的BootStrap示例在grails.util.Environment内部使用該類來執行。您也可以自己使用此類來執行您自己的特定于環境的邏輯:

Environment.executeForCurrentEnvironment {

    production {

        // do something in production

    }

    development {

        // do something only in development

    }

}

繼續閱讀