在Grails程序中获取配置文件中定义的参数

在程序开发中,为了提供可维护性,我们通常将可能变化的配置项以参数的形式存放在配置文件中,这样在环境或条件发生变化时,就不需要重新打包,部署应用了。在Grails3程序中如何读取这些定义在配置文件中的配置项呢?

因为Grails的核心其实时Spring, 所以基本上我们可以采用Spring中的方法来完成这个任务,只是具体的语法上可能会稍有不同。

假设要在程序中读取 application.yml 文件中有一个配置项:numbers

1
2
3
max:
line:
numbers:42

通过 GrailsApplication 中的Config属性获得

直接上示例代码 :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import grails.core.GrailsApplication

class BootStrap {

// this property will be auto-wired from
// the Spring application context...
GrailsApplication grailsApplication

def init = { servletContext ->
// retrieve the max.line.numbers config value
def maxLineNumbers = grailsApplication.config.getProperty('max.line.numbers')

// ...

}
}

也可以在读取的时候指定配置项的数据类型和默认值,Grails会自动帮助转换, 如:

1
2
Integer maxLineNumbers =  config.getProperty('max.line.numbers', Integer)
Integer maxLineNumbers = config.getProperty('max.line.numbers', Integer, 2112)

也可以指定配置项是必须存在,否则抛出异常。

1
Integer maxLineNumbers =  config.getRequiredProperty('max.line.numbers', Integer)

GrailsConfigurationAware接口

实现 GrailsConfigurationAware 接口, 该接口需要实现 setConfiguration 方法, 示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import grails.config.Config
import grails.core.support.GrailsConfigurationAware

class WidgetService implements GrailsConfigurationAware {

int area

def someServiceMethod() {
// this method may use the area property...
}

@Override
void setConfiguration(Config co) {
int width = co.getProperty('widget.width', Integer, 10)
int height = co.getProperty('widget.height', Integer, 10)
area = width * height
}
}

使用 @Value 注释

使用依赖注入(DI), 示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.beans.factory.annotation.Value

class WidgetService {

int area

@Value('${widget.width}')
int width

def someServiceMethod() {
// this method may use the width property...
}
}

如果需要取的配置不存在,则抛出异常。当然,也可以为配置提供默认值

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.beans.factory.annotation.Value

class WidgetService {

@Value('${widget.width:50}')
int width

def someServiceMethod() {
// this method may use the area property...
}
}

本文标题:在Grails程序中获取配置文件中定义的参数

文章作者:晨星

发布时间:2019年06月26日 - 22:06

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/java/java-grails-get-config-parameters/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。