本文将带领大家快速地了解Grails的基本配置和环境的相关概念和知识。
Grails应用的配置文件都放在grails-app/conf下,典型的文件有:
  • BootStrap.groovy:指定应用启停时的行为
  • BuildConfig.groovy:构建环境的配置
  • Config.groovy:主配置文件
  • DataSource.groovy:数据源配置
  • xxxFilters.groovy:定义了过滤器
  • UrlMappings.groovy:指定URL Mapping
Grails的配置有2个主要特点:
  1. 建立在ConfigSlurper基础之上,这种配置语法类似Java的properties文件,但允许你使用Java类型和Groovy语法。这样,你完全可以将配置选项作为变量在配置文件中重复使用,简化了配置的书写。
  2. 引入了环境概念,可以让你针对不同环境准备多套配置。缺省的环境有development、test、production。
介绍完毕,现在让我们来看看Grails中配置的书写。首先,要使用配置变量,当然就需要先定义它:
//注意配置变量前不要加任何类型定义信息:如def、boolean
    foo.bar.hello = "world"
接着,就是在程序中使用这个变量了,有两种方法:
//法1:使用grailsApplication
    grailsApplication.config.foo.bar.hello
    
    //法2:使用ConfigurationHolder
    ConfigurationHolder.config.foo.bar.hello
看过了基本的配置语法,该是了解定义环境的时候了。这里DataSource.groovy是个好例子:
dataSource {
        //公共配置
    }
    environments {
        development {
            dataSource {
                //开发环境配置
                //如开发库用户名/密码
            }
        } 
        test { …… }
        production { …… }
    }
现在,通过在命令行中指定环境来使用不同环境下的配置:grails [environment] [command name]。如:
//使用测试环境来打包
    grails test war
Grails还允许你自定义环境,配置同上,在运行时则需要通过grails.env参数来告知当前环境。如:
grails -Dgrails.env=UAT run-app
除了在命令行中使用,我们还可以在BootStrap.groovy中使用:
class BootStrap {
         def init = { servletContext ->
            environments {
                development { …… }
                test { …… }
                production { …… }
            }
         }
         def destroy = {
         }
    }
也可以在程序中用它来定义环境相关的逻辑(注意下例代码和上面代码的不同):
Environment.executeForCurrentEnvironment {
        production { …… }
        development { …… }
    }
相关方法:
  • 获得当前环境值:Environment.current
  • 执行环境相关的逻辑:Environment.executeForCurrentEnvironment
至于基本的配置选项,这里就不再一一列出,请参见文档。其中值得注意的是“grails.views.default.codec”,要想减少站点受到XSS攻击的风险,请设置为“html”。