本文将带领大家快速地了解Grails的基本配置和环境的相关概念和知识。
Grails应用的配置文件都放在grails-app/conf下,典型的文件有:
- BootStrap.groovy:指定应用启停时的行为
- BuildConfig.groovy:构建环境的配置
- Config.groovy:主配置文件
- DataSource.groovy:数据源配置
- xxxFilters.groovy:定义了过滤器
- UrlMappings.groovy:指定URL Mapping
Grails的配置有2个主要特点:
- 建立在ConfigSlurper基础之上,这种配置语法类似Java的properties文件,但允许你使用Java类型和Groovy语法。这样,你完全可以将配置选项作为变量在配置文件中重复使用,简化了配置的书写。
- 引入了环境概念,可以让你针对不同环境准备多套配置。缺省的环境有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”。