如何使用Quarkus配置文件

380 阅读12分钟

使用Quarkus配置文件

使用Quarkus作为一个反应式框架,对Java用户来说是可以接受的,也是有吸引力的。它具有令人兴奋的特性,如热重载、反应式程序开发能力、快速启动和重启时间、MicroProfile规范支持等等。

在这篇文章中,人们将能够了解到Quarkus配置文件。这些是设置的集合,可以分配一个特定的标签来快速访问它们。然而,访问取决于当前使用的环境。

先决条件

要想继续学习文章中的代码示例和解释,需要以下条件。

  • 在机器上安装最新的Java开发工具包。本文使用的是第17版。
  • 一个好的Java IDE。本文使用[IntelliJ]版本2021.2.2
  • 结构化查询语言(SQL)的基本概念。
  • 一个强大的互联网连接。互联网是用来获取索引,以便快速开发和生成项目。

请务必跟进上述技术的最新版本。应用程序的外观可能根据发布日期而有所不同。

主要启示

文章跟进结束后,需要吸收的一些要点包括。

  • 什么是Quarkus配置文件?
  • 配置文件的重要性。
  • 在Quarkus中设置配置文件的一些方法。其中包括在application.properties 和'YAML'文件中设置配置文件。
  • 在开发阶段轻松地浏览所设置的配置文件。

什么是Quarkus配置文件?

Quarkus,像其他MicroProfile一样,遵循MicroProfile规范。它允许开发者无缝地设置项目中发现的变量,并在不同的生命周期中在项目范围内访问它们。

项目的设置通常存储在application.properties 文件中。此外,开发人员可以在main 文件夹中找到该文件,即resources 文件夹。开发人员可以设置的一些变量包括指出数据源,如postgresqlmysql数据源属性和设置,如用户名密码url访问端口等等。

配置文件可以保存应用程序运行过程中需要的变量。这些可以包括与主要应用源代码文件隔离的变量。因此,这些变量可以在以后只在需要时被注入到应用程序中。开发人员喜欢用配置文件来设置整个系统的属性和环境变量。

Quarkus的配置文件就像一个容器,可以容纳整个应用程序中或项目生命周期中某一阶段的设置和变量。它们可以包含一个或多个变量和设置。当使用时,例如在一个阶段,它们会覆盖之前设置的类似设置或变量数据。

设置这些配置文件是有利的,因为人们可以在应用程序处于不同的开发阶段时快速切换。例如,从开发到测试,从测试到生产。配置之间的切换不需要额外的设置。框架会自动为你进行切换。

检查和配置应用程序的属性

在这一节中,Quarkus项目的配置将被展示。为了能够在Quarkus中配置应用程序的属性,请执行以下操作。

创建一个新的Quarkus项目

打开IntelliJ(或任何其他IDE),点击创建一个新项目。选择Quarkus作为要使用的框架。然后,如下面的图片所示进行设置。

New Quarkus project

设置以下内容为其依赖项。

Application dependencies

另一种方法是使用Quarkus项目初始化网站

项目结构

新创建的应用程序目录结构如下图所示。

.
├── quarkus-config-profiles
│   └── src
│     ├── main
│         ├── docker
│         ├── java
│         └── resources
│             └── META-INF
│                 ├── resources
│                 └── application.properties
│     └── test
│   ├── .dockerignore
│   ├── .gitignore
│   ├── mvnw
│   ├── mvnw.cmd
│   ├── pom.xml
│   ├── quarkus-config-profiles.iml
│   └── README.md

找到位于文件夹的application.properties 文件,如下图所示。

Location of the application.properties file

该文件是用于开发、测试和生产阶段的整体应用。

使用下面的命令运行该应用程序。

./mvnw compile quarkus:dev

如果使用上面的命令不能运行,请尝试。

mvn compile quarkus:dev

正如所见,该应用程序默认在端口8080运行。通过一个新的独立终端访问该应用程序,使用。

curl http://localhost:8080/hello

设置一些配置

打开application.properties 文件。接下来,继续并编辑它,如下。

  • 将接收请求和发出响应的HTTP端口从普通的8080 ,设置为端口8081
  • 数据源的种类。在这种情况下,它将是PostgreSQL。
  • 数据库凭证(用户名和密码)。
  • JDBC URL。这个URL总是被用来连接应用程序和数据库。
  • Hibernate-ORM数据库生成属性。这个属性提供了一个完整的对象关系映射器支持。
  • 要在控制台中显示的日志类型。这将是INFO类型的。

这个步骤显示在下面的代码中。

# Global
# Normal configurations
quarkus.http.port=8081
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=username
quarkus.datasource.password=password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/my_db
quarkus.log.console.level=INFO

测试配置

重新启动应用程序并检查它在哪个端口上运行。

注意它是在新设置的端口上运行的。

在一个新的终端上,使用下面的代码访问该应用程序。

curl http://localhost:8081/hello

使用Quarkus配置文件配置应用程序

通过下面的步骤实现。

  • [学习如何设置配置格式]。
  • 设置配置文件。
  • 测试设置的配置配置文件。

Quarkus的配置配置文件格式

Quarkus的可用配置文件有三种。它们是

  • dev: 这只在开发阶段有效。例如,当执行./mvnw compile quarkus:dev.
  • test:它的应用处于测试阶段。例如,当执行./mvnw compile quarkus:test
  • prod:它只在生产阶段活动。例如,当执行./mvnw package 。最后,开发人员将把这些设置应用到操作环境中使用的打包的应用程序。

Quarkus默认识别上述的配置文件。然而,这并不意味着除了上面提到的三个配置文件之外,添加其他可定制的配置文件是不可能的。这种方法将在后面展示。

配置文件有一个特殊的格式,以使它们能够被识别并与其他文件分开。它以百分比或模数符号(%)开始,然后是配置文件名称和变量或设置。最后,这些将由一个句号(.)分开。最后将以要保持的值结束。

这种格式看起来如下。

# An example of a configuration profile format
%{quarkus-profile-name}.configuration=value
%{quarkus-profile-name}.variable=value

因此,例如,如果它是在开发配置文件下,它可以是。

%dev.quarkus.http.port=8082

这覆盖了默认或全局配置中的一个。因此,在开发阶段,HTTP访问端口将被8082

使用默认的配置文件

要在应用程序中使用以下内容,请复制并粘贴到application.properties 文件中。

# Global
# Normal configurations
quarkus.http.port=8081
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=username
quarkus.datasource.password=password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/my_db
quarkus.log.console.level=INFO

# Development configuration profile
%dev.quarkus.http.port=8082
%dev.quarkus.log.console.level=ALL

# Testing environment configuration profile
%test.quarkus.http.port=9090
%test.quarkus.log.console.level=DEBUG
%test.quarkus.datasource.db-kind=postgresql
%test.quarkus.datasource.username=username
%test.quarkus.datasource.password=password
%test.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/my_db
%test.quarkus.http.access-log.enabled=true

# Production configuration profiles. This is mainly used for the final package before deployment
%prod.quarkus.package.type=uber-jar
%prod.quarkus.http.port=8085

开发模式

现在在开发模式下使用开发配置文件运行应用程序。通过在终端运行这段代码来做到这一点。

./mvnw compile quarkus:dev

在日志中注意到,应用程序在端口8082上运行。

通过在另一个单独的终端上运行以下命令来访问它。

curl http://localhost:8082/hello

测试模式

运行下面的命令。

./mvnw compile quarkus:test

生产模式

这些设置将允许应用程序被打包成'uber-jar'文件类型。uber-jar文件有其所有的依赖关系,不像典型的jar文件,它的依赖关系在一个单独的位置。

运行下面的命令。

./mvnw package

检查'目标'文件夹内的打包文件。通过执行下面的命令来运行这个jar文件。

java -jar target/quarkus-config-profiles-1.0-SNAPSHOT-runner.jar

人们可以通过以下方式访问这个正在运行的应用程序。

curl http://localhost:8085/hello

人们还可以根据那些可用的数据源来改变数据源。

例如,人们可以选择H2 ,而不是Postgres或任何其他的需要。开发人员可以为不同的配置文件设置不同的数据源。

例如,可以在开发阶段使用本地数据库服务器运行应用程序,而在生产模式下部署使用远程数据库的打包应用程序。

使用用户定义的配置文件

使用与上面所示相同的格式来完成。例如,对于一个名称为 "prototype "的配置文件,在其他配置文件下,做如下操作。

# Prototype stage
%prototype.quarkus.http.port=9095
%prototype.quarkus.log.console.level=ALL

通过运行以下内容来运行配置文件中的应用程序。

./mvnw compile quarkus:dev -Dquarkus.profile=prototype

这个命令意味着开发模式将使用 "prototype "配置文件来运行。这个配置文件将被用来代替*"dev"。*

通过以下方式访问该应用程序。

curl http://localhost:9095/hello

设置和使用不同配置文件中的变量

在这个位置设置的变量可以按照Java EE和MicroProfile的标准和规范注入到应用程序中。这些变量可以覆盖先前设置的环境变量值,这取决于使用的配置文件。

设置变量

要添加变量,例如,名为'姓名'、'年龄'和'身高'的变量属于一个''对象。'的对象,在全球配置设置下的文件中添加以下代码。

# Global variables
person.name=john
person.age=28
person.height=165

在'dev'配置文件下添加以下内容。

# Dev variables
%dev.person.name=alice
%dev.person.age=20
%dev.person.height=154

在'test'配置文件下添加以下内容。

# Test variables
%test.person.name=mike
%test.person.age=22
%test.person.height=170

在 "prod "配置文件下添加以下内容。

# Production variables
person.name=tom
person.age=12
person.height=100

在 "prototype "配置文件下添加以下内容。

# Prototype variables
person.name=jane
person.age=54
person.height=174

注入变量

前往 "ExampleResource.java "文件。在文件中的类内添加以下代码。这是在其他块的上方。

@ConfigProperty(name = "person.name")
String name;

@ConfigProperty(name = "person.age")
String age;

@ConfigProperty(name = "person.height")
String height;

在该类中添加另一个端点,然后通过http://localhost:8081/hello/person.访问它。其代码如下。

@Path("/person")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String person() {
  return "The person is " + name + " of age " + age + " yrs and of height of " + height + " cm";
}

在'test'文件夹中,搜索ExampleResourceTest.java 文件并打开它。在该类中添加下面的代码。

@Test
public void testPersonEndpoint() {
  given()
    .when().get("/hello/person")
    .then()
    .statusCode(200)
    .body(is("The person is mike of age 22 yrs and of height of 170 cm"));
}

这个测试应被用来检查所使用的配置文件的输出是否符合预期。

测试变量

现在我们已经在上一节中设置了配置文件,让我们继续进行,并进行项目测试如下。

在dev profile中测试

使用以下方法运行应用程序。

./mvnw compile quarkus:dev

在另一个终端中,通过运行以下命令访问它。

 curl http://localhost:8082/hello/person.

结果将是 "这个人是22岁的麦克,身高170厘米"。这个结果的输出是因为在测试运行时使用了测试配置文件。

在有日志的终端上,键入r 来运行测试。如果它产生一个成功的输出,那么一切都很好。

在原型配置文件中测试

使用以下方法运行应用程序。

./mvnw compile quarkus:dev -Dquarkus.profile=prototype

在另一个终端,使用curl http://localhost:9095/hello/person

在有日志的终端上,键入r 来运行测试。如果它产生一个成功的输出,那么一切都很好。

预期的输出是:"这个人是Jane,年龄54岁,身高174厘米"。

在YAML文件中配置配置文件

另一种可以在Quarkus中配置配置文件的方法是使用YAML文件。

要做到这一点,请遵循以下步骤。

打开一个新的终端,运行下面的命令。

./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-config-yaml"

上述命令将添加quarkus-config-yaml 扩展名,使项目中的YAML文件得到快速和方便的使用。

或者,在pom.xml 文件中的依赖部分内添加下面的代码块。

<!--Add the quarkus-config-yaml extension to your project-->
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-config-yaml</artifactId>
</dependency>

通过右键点击pom.xml 文件,在Maven 选项下选择Reload project 选项,重新加载整个项目。同样地,只要重新启动IDE,它就会刷新项目。

application.properties 文件重命名为application.properties.OLD 。这使得其内容在系统中可用,但在应用程序中不使用。这种重命名有助于在将配置转换为YAML文件时参考这些配置。

在与application.properties.OLD 文件相同的位置,创建一个名为application.yml 的新文件。

现在,使用缩进格式样式将配置从application.properties.OLD 翻译到application.yml 文件。如下图所示。

# Global configurations and variables
quarkus:
  http:
    port: 8081
  datasource:
    db-kind: postgresql
    username: username
    password: password
    jdbc:
      url: jdbc:postgresql://localhost:5432/my_db
  hibernate-orm:
    database:
      generation: drop-and-create
  log:
    console:
      level: INFO

person:
  name: john
  age: 28
  height: 165

# Dev configurations and variables
"%dev":
  quarkus:
    http:
      port: 8082
    log:
      console:
        level: ALL
  person:
    name: alice
    age: 20
    height: 154

# Testing environment configuration profile
"%test":
  quarkus:
    http:
      port: 9090
      access-log:
        enabled: true
    log:
      console:
        level: DEBUG
    datasource:
      db-kind: postgresql
      username: username
      password: password
      jdbc:
        url: jdbc:postgresql://localhost:5432/my_db
  person:
    name: mike
    age: 22
    height: 170

# Production configuration profiles.
"%prod":
  http:
    port: 9095
  quarkus:
    package:
      type: uber-jar

# Prototype profile
"%prototype":
  quarkus:
    http:
      port: 9095
    log:
      console:
        level: ALL
  person:
    name: jane
    age: 54
    height: 174

在原型配置文件中重新启动应用程序,使用。

./mvnw compile quarkus:dev -Dquarkus.profile=prototype

通过运行测试结果。

curl http://localhost:9095/hello/person

输出是 "这个人是Jane,年龄54岁,身高174厘米"。按r ,在日志终端运行测试。测试将像以前一样成功运行。

这次运行证明了application.properties 文件中的配置与application.yml 文件中的配置是相同的。

尝试在其他配置文件中重新启动项目。添加新的配置文件的配置和变量,并在其中运行应用程序。

结论

系统开发是一个耗时的过程,随着产品环境的变化,需要多次改变设置。这导致需要一种快速的方式来切换它们,因此引入了配置文件。

在这篇文章中,我们讨论并学习了什么是Quarkus配置文件,配置文件的类型,如开发、生产、测试和自定义;在Quarkus中设置它们在application.properties 文件和YAML 文件,以及在项目中使用和测试它们。