quarkus实战之六:配置

这篇具有很好参考价值的文章主要介绍了quarkus实战之六:配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文是《quarkus实战》系列的第六篇,咱们来掌握一个常用知识点:配置
  • 如同SpringBoot中的application.properties文件,对一个quarkus应用来说,配置是其重要的组成部分,web端口、数据库这些重要信息都放在配置中,咱们在编码时也会将一些业务参数做成配置,而不是硬编码(hard code)
  • 与配置有关的知识点不少,本文重点是如何设置,下一篇会详细说明如何使用配置
  • 本篇要学习和掌握的内容:先实践六种具体的配置方式,例如通过在系统变量、application.properties中去设置配置项,它们都是不同的配置方式,然后,再一起去了解配置文件中可以输入什么样的内容,除了常见的key&value,还有哪些类型可以用来配置
  • 将本篇的内容整理如下所示:
graph LR B(quarkus配置) --> C1(配置方式) B(quarkus配置) --> C2(配置内容) C1 --> D1(System properties) C1 --> D2(Environment variables) C1 --> D3(.env file) C1 --> D4(config目录下的application.properties) C1 --> D5(src/main/resources目录下的application.properties) C1 --> D6(MicroProfile Config configuration file) C2 --> D7(常规) C2 --> D8(引用其他配置) C2 --> D9(UUID) C2 --> D10(数组)

演示代码

  • 创建一个demo工程,参考下面的命令,这样的工程会自带一个web服务类HobbyResource.java:
mvn "io.quarkus:quarkus-maven-plugin:create" \
  -DprojectGroupId="com.bolingcavalry" \
  -DprojectArtifactId="hello-quarkus" \
  -DprojectVersion="1.0-SNAPSHOT" \
  -DclassName="HobbyResource" \
  -Dpath="actions"
  • 用下面这段代码来演示配置是否生效,可见用了一个配置项greeting.message,所以我们需要配置它的值才行
package com.bolingcavalry;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;

@Path("/actions")
public class HobbyResource {

    @ConfigProperty(name = "greeting.message")
    String message;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy, " + LocalDateTime.now() + " [" + message + "]";
    }
}
  • 写好演示代码后,执行以下命令,将项目构建成单一jar文件,用于稍后的验证操作
mvn clean package -U -DskipTests -Dquarkus.package.type=uber-jar
  • 构建成功后,在target目录下生成文件hello-quarkus-1.0-SNAPSHOT-runner.jar,咱们就用它来验证各种配置方式是否生效

配置方式一览

  • 官方给出一张图,说明了所有配置方式以及它们的优先级

    quarkus实战之六:配置

  • 接下来挨个试试这些配置方式

方式一:System properties

  • 最常见的是启动应用时候通过-D参数指定环境变量,例如下面的命令
java -Dgreeting.message="from system properties" -jar hello-quarkus-1.0-SNAPSHOT-runner.jar
  • 如下图,可以成功获取属性值

quarkus实战之六:配置

方式二:Environment variables

  • 在设置环境变量时,要注意转换规则:全大写、点号变下划线,因此greeting.message在环境变量中应该写成GREETING_MESSAGE

  • 打开控制台,执行以下命令,即可在当前会话中设置环境变量:

export GREETING_MESSAGE="from Environment variables"
  • 在同一个控制台执行java -jar hello-quarkus-1.0-SNAPSHOT-runner.jar启动应用,浏览器访问接口,如下图,可见环境变量已生效:

quarkus实战之六:配置

方式三:.env file

  • 为了避免之前的操作带来的影响,请重新打开一个控制台
  • 在pom.xml文件所在目录新建文件.env,内容如下:
GREETING_MESSAGE=from .env file
  • 执行java -jar hello-quarkus-1.0-SNAPSHOT-runner.jar启动应用,浏览器访问接口,如下图,可见环境变量已生效:

quarkus实战之六:配置

  • 这种配置方式有个问题要注意:.env中的配置,在代码中使用System.getenv(String)无法取得
  • 官方建议不要将.env文件提交到git、svn等版本控制工具中

方式四:config目录下的application.properties

  • 为了避免之前的操作带来的影响,请删除刚才创建的.env文件

  • hello-quarkus-1.0-SNAPSHOT-runner.jar文件所在目录,新建文件夹config

  • config文件夹下新建文件application.properties,内容如下:

    greeting.message=from config/application.properties
    
  • 执行java -jar hello-quarkus-1.0-SNAPSHOT-runner.jar启动应用,浏览器访问接口,如下图,可见环境变量已生效:

quarkus实战之六:配置

方式五:src/main/resources目录下的application.properties

  • 为了避免之前的操作带来的影响,请删除刚才创建的config文件夹(里面的文件也删除)
  • src/main/resources目录下的application.properties,这个配置相信您应该很熟悉,SpringBoot也是这样配置的:

quarkus实战之六:配置

  • 运行应用试试,配置生效了

quarkus实战之六:配置

方式六:MicroProfile Config configuration file

  • 为了避免之前的操作带来的影响,请将src/main/resources/application.properties文件中的greeting.message配置项删除
  • MicroProfile是一个 Java 微服务开发的基础编程模型,它致力于定义企业 Java 微服务规范,其中的配置规范有如下描述:

quarkus实战之六:配置

  • 上图红框指出了MicroProfile规定的配置文件位置,咱们来试试在此位置放置配置文件是否能生效

  • 如下图红框,在工程的src/main/resources/META-INF目录下新建文件microprofile-config.properties,内容如黄框所示

    quarkus实战之六:配置

  • 运行应用试试,配置生效了

quarkus实战之六:配置

  • 注意:microprofile-config.properties文件所在目录是src/main/resources/META-INF,不是src/main/resources/META-INF/resources

  • 至此,六种配置方式及其实例验证都完成了,您可以按照自己的实际情况灵活选择

配置内容:常规

  • 现在我们知道了通过何种途径将配置信息传给应用,接下来要看的是配置信息本身:我们可以在配置文件中输入哪些内容呢?
  • 最常用的当然是字符串类型的键值对了,如下所示,刚才一直在用的,就不赘述了:
greeting.message=from config/application.properties

配置内容:引用其他配置

  • 配置项的值可以引用其他配置项,如下所示,greeting.message的值由两部分拼接而成:固定的hello, 、以及配置项greeting.name的值,表达式的格式是${配置项名称:配置项找不到时的默认值}:xxxxxx的意思是如果找不到配置项greeting.name,就用字符串xxxxxx代替
greeting.name=Will
greeting.message=hello, ${greeting.name:xxxxxx}
  • 运行代码,浏览器收到响应如下,符合预期,greeting.message的值可以引用greeting.name配置项的值:
    quarkus实战之六:配置
  • 现在去掉配置项greeting.message,看看默认值xxxxxx能否生效,如下图,在找不到配置项greeting.message的时候,咱们配置的默认值已经生效了
    quarkus实战之六:配置

配置内容:UUID

  • 当同一个应用同时在多个机器上运行时,如何让每个进程有个独立的身份?
  • quarkus提供了一个生成UUID的方式,可以低成本解决上述问题,如下所示,应用启动时,${quarkus.uuid}会生成一个UUID,此时的greeting.message的值也是唯一的
greeting.message=hello, ${quarkus.uuid}
  • 运行应用试试,如下图,UUID成功生成了
    quarkus实战之六:配置
  • 多刷几次浏览器,UUID始终不变,看来此UUID在整个进程存活期间都不会改变
  • 重启应用,再用浏览器访问,如下图,UUID已更新,看来进程身份的唯一性可以通过此配置来保证
    quarkus实战之六:配置

配置内容:集合

  • 集合类型的配置也是常见需求,下面是常规的集合配置
my.collection=dog,cat,turtle
  • 对应的代码如下,可见只要被ConfigProperty修饰的成员变量是集合类型就行
@Path("/actions")
public class HobbyResource {

    @ConfigProperty(name = "my.collection")
    List<String> message;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy, " + LocalDateTime.now() + ", " + message + "";
    }
}
  • 浏览器访问此接口,响应如下,符合预期
    quarkus实战之六:配置
  • 还可以将集合中的每个元素分开写,如下所示,代码不变,效果和前面的配置一样
my.collection[0]=dog
my.collection[1]=cat,turtle
my.collection[2]=turtle
  • 至此,输入配置的常规操作已经讲完了,接下来的文章与本篇是配套的,会详细说明如何在代码中使用这些配置

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...文章来源地址https://www.toymoban.com/news/detail-604178.html

到了这里,关于quarkus实战之六:配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【git】配置代理访问github

    参考大神的方法 没有解决。 GitHub访问加速 简直完美! C:Userszhangbin.ssh 报错 通过clash 一定要allow lan 一定有system proxy zhangbin@DESKTOP-1723CM1 MINGW64 /g/CDN/NET-EQ-DEV zhangbin@DESKTOP-1723CM1 MINGW64 /g/CDN/NET-EQ-DEV $ git clone https://github.com/TaoistKing/AudioPlc.git Cloning into ‘AudioPlc’… remote: Enumerati

    2024年01月25日
    浏览(39)
  • 访问GitHub的host配置

    注意:随着时间推移,以上ip可能失效,如果失效,可在这里查询:“github.com”A记录/cname检测结果--Dns查询|dns查询--站长工具

    2024年02月13日
    浏览(53)
  • quarkus实战之一:准备工作

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+实战风格,既有知识普及、更有实际操作,在涉

    2024年02月16日
    浏览(43)
  • quarkus实战之八:profile

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第八篇,经过前面的学习,咱们对配置有了足够了解,但问题也随之而来:如何让应用以最小的改动同时运行在不同环境(如本地、测试、生产等) 举个例子,下面是个

    2024年02月15日
    浏览(34)
  • [github配置] 远程访问仓库以及问题解决

    作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于 新西兰奥克兰大学攻读IT硕士学位 。 荣誉: 阿里云博客专家认证 、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。 跨领域学习 ,喜欢摄影、弹吉他、咏春拳。 文章深入浅出、语言风

    2024年02月05日
    浏览(59)
  • quarkus实战之四:远程热部署

    将本地的改动极速同步到远程服务端,并自动生效,掌握此技能,开发调试会更高效 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第四篇,如标题所示,今天的任务是完成远程热部署实战 作为一名Java程序员,以下场

    2024年02月16日
    浏览(39)
  • quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第五篇,一起去熟悉quarkus的maven插件(就是下图红框中的那个plugin),用好它可以使

    2024年02月16日
    浏览(38)
  • quarkus实战之二:应用的创建、构建、部署

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第二篇,目标是开发HelloWorld应用,让我们对quarkus有最基本的了解,写好的代码会在以下几种场景运行,这应该覆盖了大部分运行情况,绿色背景的表示具体的运行方式,

    2024年02月16日
    浏览(30)
  • WebSocket实战之六心跳重连机制

    WebSocket应用部署到生产环境,我们除了会碰到因为经过代理服务器无法连接的问题(注:该问题可以通过搭建WSS来解决,具体配置请看 WebSocket实战之四WSS配置 ),另外一个问题就是外网环境不稳定经常会断开或者服务器重启或者网络中间服务器当发现一个长连接长时间没有

    2024年02月07日
    浏览(49)
  • quarkus实战之三:开发模式(Development mode)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 前文咱们曾提到过几种启动方式,有一种用maven命令启动的,可以进入开发模式,命令如下: 当时只提到此模式能看到详细系统信息,并未展开说明更多信息,实际上,此模式下还有很多实用的功能

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包