Grails 应用程序中的 Micronaut @ConfigurationProperties
Grails 4 应用程序可以访问许多 Micronaut 功能。了解如何通过 @ConfigurationProperties 将属性值绑定到结构化对象。
作者:Sergio del Amo
Grails 版本 4.0.1
1 培训
Grails 培训 - 由创建并积极维护 Grails 框架的人员开发和提供!
2 入门
在本指南中,我们将通过创建一个用于下载包含图书列表的 Excel 文件的应用程序来展示 Grails 文件传输功能。
2.1 您需要具备的条件
要完成本指南,您需要具备以下条件
-
有一些空闲时间
-
一个合适的文本编辑器或 IDE
-
安装了 JDK 1.8 或更高版本,并相应地配置了
JAVA_HOME
2.2 解决方案
我们建议您按照下一部分的说明逐步创建应用程序。但是,您可以直接跳到完整示例。
-
下载并解压源码
或
然后,cd
到下载/克隆项目的根项目中的 complete
文件夹。
3 编写应用程序
grails create-app example.grails.complete
3.1 配置属性
在本部分中,我们将探讨如何通过 @ConfigurationProperties
将属性值绑定到结构化对象。
确保在 build.gradle
中有 micronaut-inject-groovy
依赖项。
build.gradle
compileOnly "io.micronaut:micronaut-inject-groovy"
创建一个名为 AddressConfiguration.groovy
的文件。
src/main/groovy/example/grails/AddressConfiguration.groovy
package example.grails
import io.micronaut.context.annotation.ConfigurationProperties
@ConfigurationProperties("address") (1)
class AddressConfiguration {
String street
String city
String country
}
1 | @ConfigurationProperties 注解获取配置前缀。 |
属性文件中定义的任何属性如果带有前缀 address
,且名称与属性之一相同,会自动分配到此对象。
向 application.yml
中添加一些属性
grails-app/conf/application.yml
address:
street: 221B Baker Street
city: London
country: United Kingdom
3.2 标记库
创建一个 标记库 来呈现地址
grails-app/taglib/example/grails/AddressTagLib.groovy
package example.grails
import org.springframework.beans.factory.annotation.Autowired
class AddressTagLib {
static namespace = "app" (1)
@Autowired (2)
AddressConfiguration addressConfiguration (3)
def address = { attrs, body ->
out << """\
<div class='adr'>
<div class='street-address'>${addressConfiguration.street}</div>
<span class='locality'>${addressConfiguration.city}</span>,
<div class='country-name'>${addressConfiguration.country}</div>
</div>""" (4)
}
}
1 | 默认情况下,标记会添加到 Grails 缺省名称空间并与 GSP 页中的 g: 前缀一起使用。但是,可以通过向 TagLib 类添加一个静态属性来指定不同的名称空间。 |
2 | 要获取 Micronaut bean 的引用,必须使用 Autowired 注释 |
3 | 使用其类型将 Micronaut Bean (AddressConfiguration ) 注入到你的 TagLib 中。 |
4 | 创建一个有效的 adr 微格式 HTML 代码片段。 |
3.3 验收测试
编辑 grails-app/views/index.gsp
,当你访问主页 /
时当前呈现的 GSP,并添加以下代码片段
grails-app/views/index.gsp
...
<div id="content" role="main">
....
...
<app:address/>
</div>
...
现在我们使用 Geb 创建一个验收测试来验证地址在主页上已呈现
src/integration-test/groovy/example/grails/AddressSpec.groovy
package example.grails
import geb.spock.GebSpec
import grails.testing.mixin.integration.Integration
@Integration
class AddressSpec extends GebSpec {
def "verify address is displayed in homepage"() {
when:
browser.go("/")
then:
browser.driver.pageSource.contains('221B Baker Street')
}
}
4 测试应用
要运行测试
./grailsw
grails> test-app
grails> open test-report
或
./gradlew check
open build/reports/tests/index.html