显示导航

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

5 Grails 帮助

对象计算公司 (OCI) 赞助了本指南的创建。可提供多种咨询和支持服务。

OCI 是 Grails 的家园

认识团队