码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • quarkus实战之三:开发模式(Development mode)


    合集 - quarkus实战(24)
    1.quarkus实战之一:准备工作07-212.quarkus实战之二:应用的创建、构建、部署07-22
    3.quarkus实战之三:开发模式(Development mode)07-23
    4.quarkus实战之四:远程热部署07-245.quarkus实战之五:细说maven插件07-256.quarkus实战之六:配置07-267.quarkus实战之七:使用配置07-278.quarkus实战之八:profile07-289.quarkus依赖注入之一:创建bean07-3010.quarkus依赖注入之二:bean的作用域07-3111.quarkus依赖注入之三:用注解选择注入bean08-0112.quarkus依赖注入之四:选择注入bean的高级手段08-0213.quarkus依赖注入之五:拦截器(Interceptor)08-0314.quarkus依赖注入之六:发布和消费事件08-0415.quarkus依赖注入之七:生命周期回调08-0516.quarkus依赖注入之八:装饰器(Decorator)08-0717.quarkus依赖注入之九:bean读写锁08-0818.quarkus依赖注入之十:学习和改变bean懒加载规则08-0919.quarkus依赖注入之十一:拦截器高级特性上篇(属性设置和重复使用)08-1020.quarkus依赖注入之十二:禁用类级别拦截器08-1121.quarkus依赖注入之十三:其他重要知识点大串讲(终篇)08-1222.quarkus数据库篇之二:无需数据库也能运行增删改查(dev模式)08-1623.quarkus数据库篇之三:单应用同时操作多个数据库08-1724.quarkus数据库篇之四:本地缓存08-18
    收起

    欢迎访问我的GitHub

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

    本篇概览

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

    关于开发模式(Development mode)

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

    系统信息

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

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

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

  • 相关阅读:
    每个人都应该去学写作
    关系代词 - 定义与分类
    代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- itextpdf
    Spa项目开发(动态树&数据表格&分页)
    由于计算机中丢失msvcp110.dll的解决方法与msvcp110.dll丢失修复方法
    Stable-Diffusion-WebUI 常用提示词插件
    vue仿企微文档给页面加水印(水印内容可自定义,超简单)
    达梦数据库调整非默认模式所属数据库用户
    【数据仓库】hadoop生态圈与数据仓库
    PyCharm+PyQT5之一环境搭建
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/17567290.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号