显示导航

Grails 应用程序中的 Micronaut @ConfigurationProperties

Grails 应用程序可以使用许多 Micronaut 功能。了解如何通过 @ConfigurationProperties 将属性值绑定到结构化对象。

作者:Sergio del Amo、Puneet Behl

Grails 版本:6.0.0-RC1

1 培训

Grails 培训 - 由创建并积极维护 Grails 框架的人员开发并提供!

2 入门

在本指南中,我们将通过创建一个使用 Excel 文件下载书籍列表的应用程序来演示 Grails 文件传输功能。

2.1 您将需要

要完成本指南,您将需要以下内容

  • 一些时间

  • 一个不错的文本编辑器或 IDE

  • 已安装 JDK 1.8 或更高版本,并且已正确配置了 JAVA_HOME

2.2 如何完成指南

要开始执行,请执行以下操作

Grails 指南存储库包含两个文件夹

  • initial 初始项目。通常是一个带有附加代码的简单 Grails 应用程序,可让您抢先一步。

  • complete 一个完成的示例。这是通过执行指南介绍的步骤,并将这些更改应用于 initial 文件夹的结果。

要完成指南,请转到 initial 文件夹

  • cdgrails-guides/grails-configuration-properties-micronaut/initial

并按照下一部分中的说明进行操作。

如果你cd进入grails-guides/grails-configuration-properties-micronaut/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: 前缀。不过,可以通过向标记库类添加一个静态属性来指定其他名称空间。
2 要获取对 Micronaut Bean 的引用,你必须使用 Autowired 注释
3 使用其类型将 Micronaut Bean (AddressConfiguration) 注入到标记库中。
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 帮助

Object Computing, Inc. (OCI) 赞助了本指南的创建。提供各种咨询和支持服务。

OCI 是 Grails 的家园

团队介绍