欢迎访问我的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已经考虑到这种情况,为我们准备了远程热部署方案,下一篇文章会详细介绍和操作

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

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

quarkus实战之三:开发模式(Development mode)的更多相关文章

  1. [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考

    原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...

  2. 关于测试驱动的开发模式以及实战部分,建议看《Python Web开发测试驱动方法》这本书

    关于测试驱动的开发模式以及实战部分,建议看<Python Web开发测试驱动方法>这本书

  3. 玩转Android之MVVM开发模式实战,炫酷的DataBinding!

    C# 很早就有了MVVM的开发模式,Android手机中的MVVM一直到去年Google的I\O大会上才推出,姗姗来迟.MVVM这中开发模式的优点自不必多说,可以实现视图和逻辑代码的解耦,而且,按照G ...

  4. IPD体系向敏捷开发模式转型实施成功的四个关键因素

    文/杨学明  集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Development)是当前国内外企业产品研发管理的最常用的3种模式.随着创新环境的快速发展,许多企业都会 ...

  5. Flink的sink实战之三:cassandra3

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化

    XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...

  7. weblogic开发模式与生产模式介绍

    weblogic开发模式与生产模式介绍 开发模式:该模式启用自动部署 生产模式:该模式关闭自动部署 weblogic server 三种部署方法:自动部署.控制台部署.命令部署 自动部署:当其处于启用 ...

  8. 小团队git开发模式

    实验室要使用Git进行代码管理,但是git非常复杂,各种开发模式也是层出不穷.作为新手的偶们很是发囧啊!!网上搜了一下,发现很多并不适合我们小团队运作(它本身就是为Linux内核管理而开发的分布式代码 ...

  9. 有关 Hybrid 开发模式实践总结

    前言 随着公司业务不断发展,移动开发项目越来越多,项目任务时间紧,我们内部开发流程是以项目为导向,有别于一般公司对产品不断迭代的做法,但移动端开发人员资源有限,需要在不同项目之间做业务场景切换开发,就 ...

  10. 异常驱动的开发(Exception-Driven Development)

    你的网站或应用程序存在哪些问题?如果你在等着用户来告诉你,那么你只能看到所有的问题中已经暴露的那极小的一部分.要知道,那只是"冰山一角"! 而且,如果你真的是在守株待兔,我不得不很 ...

随机推荐

  1. 苞米豆的多数据源 → dynamic-datasource-spring-boot-starter,挺香的!

    开心一刻 2023年元旦,我妈又开始了对我的念叨 妈:你到底想多少岁结婚 我:60 妈:60,你想找个多大的 我:找个55的啊,她55我60,结婚都有退休金,不用上班不用生孩子,不用买车买房,成天就是 ...

  2. C# 禁用窗口激活

    如果界面点击时,不想让窗口激活,可以按如下操作: 1 public MainWindow() 2 { 3 InitializeComponent(); 4 SourceInitialized += O ...

  3. [C++核心编程] 4.3、类和对象-C++对象模型和this指针

    文章目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 4.3 C++ ...

  4. 使用NineData定制企业级数据库规范

    1. 为什么需要数据库规范? 在企业级应用中,数据库是非常重要的一部分,它们存储着公司的核心数据,包括客户信息.订单.产品信息等等.如果这些数据没有得到妥善的管理,那么就会导致数据不一致.数据丢失.数 ...

  5. 2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写

    2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. 为了简单起见,你可以假设: words.txt只包括小写字母和 ' ' . 每个单词只由小写 ...

  6. 2022-05-04:比如,str = “ayxbx“, 有以下4种切法 : a | yxbx、ay | xbx、ayx | bx、ayxb | x, 其中第1、3、4种切法符合:x和y的个数,至少在

    2022-05-04:比如,str = "ayxbx", 有以下4种切法 : a | yxbx.ay | xbx.ayx | bx.ayxb | x, 其中第1.3.4种切法符合: ...

  7. ModuleNotFoundError: No module named 'flask_sqlalchemy'

    ModuleNotFoundError: No module named 'flask_sqlalchemy' 解决: pip install flask_sqlalchemy

  8. Jan 2023-Prioritizing Samples in Reinforcement Learning with Reducible Loss

    1 Introduction 本文建议根据样本的可学习性进行抽样,而不是从经验回放中随机抽样.如果有可能减少代理对该样本的损失,则认为该样本是可学习的.我们将可以减少样本损失的数量称为其可减少损失(R ...

  9. phpstudy-sqlilabs-less-1

    题目:POST - Error Based - Double quotes- String - with twist 基于错误的双引号post型字符变形的注入 先抓下包,拿到格式 uname=1#&a ...

  10. boot-admin 项目数据库缺省字段设计之最佳实践

    数据库(Database)中的缺省字段(也称为默认字段),就是在一般情况下,每个数据表(Table)必须包含的字段(Field),这类字段用于满足特定的数据需求,字段值的填充或更改一般遵照一定的逻辑要 ...