Grails 3的官方配置文档对grails3加载配置的策略,以及覆盖策略提之甚少,有价值的参考信息太少。由于Grails3基于Spring-boot项目,因此通过更底层的Spring-boot的配置说明,可以得到很多有价值的信息。
详细的Spring-boot配置参考官方文档,这里仅罗列出几个重要的
改变应用程序的properties文件的路径
- 在应用程序代码中显式指明
@PropertySource
- 设置
spring.config.name
这个system property(或SPRING_CONFIG_NAME
环境变量)指定配置文件的主文件名, 默认application
- 设置
spring.config.location
这个system property(或SPRING_CONFIG_LOCATION
环境变量) 指明加载的文件路径(e.g. a classpath resource or a URL).单独设置一个环境配置文件,此配置可以被system properties, 环境变量,或命令行参数覆盖
无论程序运行于哪种environment
配置下,Spring Boot总会按照上面描述的规则加载application.properties
。如果有.yml
后缀的yaml配置文件,也会一并加载进来。
Spring Boot的配置文件的log在DEBUG
级别下会打印,在TRACE
以上级别关闭打印。
使用短命令行参数覆盖
如果想使用--port=9000
代替--server.port=9000
覆盖默认的property属性,在application.properties
文件使用占位符即可:
server.port=${port:8080}
这样也可以通过大写的环境变量PORT
覆盖配置。
依赖环境的配置文件
依赖环境的配置文件可以起名application-${profile}.properties
,这样spring boot通过-Dspring.profiles.active
或SPRING_PROFILES_ACTIVE
环境变量指定运行环境时就会加载对应的${profile}
的配置文件。
Grails官方文档提及的方案
准确来说,Grails官方文档使用的方案是上述使用短命令行参数覆盖使用的方案(当然其他方案同样适用于Grails3,只不过官方文档没提)。
官方文档的范例如下:
production:
dataSource:
url: '${JDBC_CONNECTION_STRING}'
这里就代表这个dataSource.url
的值希望通过system property(-DJDBC_CONNECTION_STRING
命令行参数)或环境变量(JDBC_CONNECTION_STRING
,环境变量可以覆盖默认properties官方文档没提)提供。并未提及实际还可以用'${JDBC_CONNECTION_STRING:DEFAULT_JDBC_STRING}'
这种方式给定默认值。
对于gradle工程,官方提供的参考build.gradle
配置文件:
bootRun {
systemProperties = System.properties
}
test {
systemProperties = System.properties
}
表示bootRun
这个task(对应Grails的run-app
)和test
这个task(对应Grails的test-app
)在运行的时候,将system properties传递给grails项目。
在gradle指定system properties的方法有两种:
- 在gradle命令行上指定
-Dproperty=value
参数 - 在
gradle.properties
文件中指定systemProp.property=value
属性
参考资料
Grails3配置文档: http://docs.grails.org/latest/guide/conf.html
Spring Boot配置文档: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html