首页 > 其他分享 >quarkus实战之三:开发模式(Development mode)

quarkus实战之三:开发模式(Development mode)

时间:2023-07-23 09:02:08浏览次数:53  
标签:Development rs ws quarkus import 断点 javax mode

欢迎访问我的GitHub

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

本篇概览

  • 前文咱们曾提到过几种启动方式,有一种用maven命令启动的,可以进入开发模式,命令如下:
mvn quarkus:dev
  • 当时只提到此模式能看到详细系统信息,并未展开说明更多信息,实际上,此模式下还有很多实用的功能
  • 作为《quarkus实战》系列的第三篇,今天咱们一起来学习开发模式(Development mode),这是quarkus为开发者准备的实用工具

关于开发模式(Development mode)

  • 开发模式是quarkus框架提供的内置工具(built-in),可直接使用
  • 开发模式提供以下功能:
  1. 系统信息:即前文提到过的,查看对象和配置、修改配置、操作单元测试等功能
  2. 热部署:修改java代码、资源文件、配置文件等类型的文件后,会立即生效
  3. 断点:这是常用功能就不多说了,稍后直接操作

系统信息

  • 访问http://localhost:8080/q/dev/,可以看到丰富的系统信息,该地址只在dev模式有效:
    在这里插入图片描述

热部署

  • 热部署是日常开发的常用功能,回顾demo中的HobbyResource.java,如下所示,非常简单:
package com.bolingcavalry;

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 {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy " + LocalDateTime.now();
    }
}
  • 为了演示修改配置可以立即生效的效果,把代码改成下面这样,注意注解ConfigProperty的作用是将指定配置的值注入修饰的成员变量中:
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;
    }
}
  • 打开文件application.properties,增加一个配置:
# 这是一个自定义属性
greeting.message=message from configuration
  • 用命令mvn quarkus:dev将应用以开发模式启动,用浏览器访问http://localhost:8080/actions,响应如下图,符合预期,配置的属性可以被正常使用:

在这里插入图片描述

  • 现在去修改代码,如下图红框:

在这里插入图片描述

  • 再把文件application.properties中的配置也改了,我这里改成了abcdef
  • 再去刷新页面,如下图所示,代码和配置的修改都生效了:

在这里插入图片描述

  • 以上就是热部署了,接下来去看另一个实用的功能:断点

断点

  • 打断点、单步调试等都是Java程序员的日常操作,就不做介绍了,直接聊聊quarkus上如何操作吧

  • 在开发模式下,断点功能是默认开启的,不过为了安全起见,quarkus断点只监听了localhost网卡,端口是5005

  • 在代码中打个断点,如下图,我这里用的是IDEA:

在这里插入图片描述

  • 在IDEA上新增一个断点,操作如下图:

在这里插入图片描述

  • 如下图所示,确认端口号正确:
    在这里插入图片描述

  • 配置完成后,点击下图红框中的按钮即可发起断点请求:
    在这里插入图片描述

  • 如果应用正常监听,应该能立即连接成功,如下图:
    在这里插入图片描述

  • 刷新浏览器,请求会立即停留在断点位置,一切都是熟悉的样子,可以像以前一样查看变量和堆栈,也可以做单步执行和条件断点等操作:
    在这里插入图片描述

  • 以上是通过localhost:5005进行本地调试的操作步骤,如果另外一台电脑想连接到到这个quarkus应用进行远程调式,是连接不成功的,因为quarkus应用启动后监听的是localhost这块网卡,为了能够让其他电脑上的IDEA远程连接到这个应用,我们需要给启动命令增加一个参数,令其监听本机所有网卡,支持远程debug的完整启动命令如下,另外,debug参数可以指定端口:

 mvn quarkus:dev -DdebugHost=0.0.0.0 -Ddebug=5006
  • 启动后控制台输出信息如下图,红框中显示监听的端口是5006

在这里插入图片描述

  • 当前电脑的IP是192.168.50.221,所以将断点的地址从localhost:5005改为192.168.50.221:5006,如下图:

在这里插入图片描述

  • 再尝试连接断点,如下所示,新的IP+端口连接成功:

在这里插入图片描述

  • 因为连接是基于IP+端口的,您完全可以在A电脑上运行应用,在B电脑上用IDEA远程连接A电脑进行断点操作

热部署的局限性

  • 前面的操作:在A电脑用mvn quarkus:dev -DdebugHost=0.0.0.0 -Ddebug=5006命令启动应用,在B电脑上用IDEA连接到A电脑上进行热部署操作,虽然也算是远程,但聪明的您应该看出了弊端:A电脑上必须有源码
  • 很多时候,我们热部署是为了处理特定问题,而出现问题的电脑可能是测试环境,甚至生产环境,这些地方是不会有源码和maven的,此时mvn quarkus:dev命令就行不通了,那又该如何处理呢?放弃热部署的便利,只能改一次代码部署一次吗?
  • 好在quarkus已经考虑到这种情况,为我们准备了远程热部署方案,下一篇文章会详细介绍和操作

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

学习路上,你不孤单,欣宸原创一路相伴...

标签:Development,rs,ws,quarkus,import,断点,javax,mode
From: https://www.cnblogs.com/bolingcavalry/p/17567290.html

相关文章

  • GNN学习 GNN Model
    GNN学习GNNModel这部分主要讲如何使用图神经网络GNN来进行节点嵌入我们首先会想到,将邻接矩阵和特征合并到一起应用到深度神经网络上,问题在于:需要O(|V|)的参数不适用于不同大小的图对节点顺序敏感我们可以将卷积神经网络泛化到图上,并应用的节点特征数据但是图没有固定的......
  • quarkus实战之二:应用的创建、构建、部署
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是《quarkus实战》系列的第二篇,目标是开发HelloWorld应用,让我们对quarkus有最基本的了解,写好的代码会在以下几种场景运行,这应该覆盖了大部分运行情况,绿色背......
  • 项目开发难点-要求el-radio组件实现点击切换的时候,先弹出框判断是否符合条件,如果符合r
    需求描述:页面radio点击的时候,先不改变radio的值,先弹出框进行判断是否符合一定的条件如果符合则发生变化,否则radio不发生变化,页面还显示原来的值。问题难点:在vue项目中,使用<el-radiov-model="radio"label="1">备选项1</el-radio><el-radiov-model="radio"label="2"......
  • 《Language Model Cascades》论文学习
    一、Introduction语言模型(LM)已展现出令人印象深刻的小样本学习能力,很多人建议应该将LM视为一个基础通用推理计算器,这个基础通用推理计算器可以被用于例如:scratchpadschainofthoughtpromptinglearnedverifiersselection-inferencebootstrappingbeenappliedinfor......
  • quarkus实战之一:准备工作
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos关于《quarkus实战》系列《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+......
  • 线性模型(linear model)基本定义及参数求解数学本质、损失函数的选择与评估数学原理、及
    线性模型(linearmodel)基本定义及参数求解数学本质、损失函数的选择与评估数学原理、及其基于线性模型衍生的其他机器学习模型相关原理讨论1.线性模型简介0x1:线性模型的现实意义在一个理想的连续世界中,任何非线性的东西都可以被线性的东西来拟合(参考Taylor......
  • Rethinking with Retrieval Faithful Large Language Model Inference
    目录概Rethinkingwithretrieval(RR)代码HeH.,ZhangH.andRothD.Rethinkingwithretrieval:faithfullargelanguagemodelinference.arXivpreprintarXiv:2301.00303,2023.概LLM(LargeLanguageModel)+检索.Rethinkingwithretrieval(RR)CoT(Chai......
  • ile "D:\Development\Python\Python39\Scripts\pip3.exe\__main__.py", line 4,
    Python中的pip命令及其用法在Python中,pip是一个非常重要的工具,它是PythonPackageIndex(简称PyPI)上的软件包管理系统。通过使用pip,我们可以方便地安装、升级和卸载Python的第三方库。安装pip在大多数情况下,新版本的Python已经预装了pip。然而,如果你的Python没有安装pip,你可以通......
  • 《Prompting Is Programming: A Query Language for Large Language Models》论文学习
    一、前言大型语言模型在诸如对话问答、代码生成等广泛任务上表现出了出色的性能。在较高的层次上,给定一段输入,大语言模型可用于按照概率统计方式自动补全序列。在此基础上,用户用指令(instructions)或示例(examples)去提示(prompt)大语言模型,以实施各种下游任务。本质上,提示(prompt)方法......
  • model的meta 设定
     fromdjango.dbimportmodelsclassPost(models.Model):no=models.IntegerField()name=models.CharField(max_length=128)classMeta:#昇順ordering=["no"]#降順#ordering=['-no']......