![Quarkus云原生微服务开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/908/41309908/b_41309908.jpg)
2.2 通用的应用开发流程
在创建了Quarkus应用之后,开发人员进行实际的代码编写工作。在开发过程中,Quarkus的开发模式可以极大地提升开发的效率。除此之外,Maven插件还提供了其他的命令来执行额外的操作。
2.2.1 使用开发模式
运行Maven插件的dev命令可以在开发模式下启动Quarkus应用,如下面的代码所示。这也是Quarkus应用的基本开发模式。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/36_01.jpg?sign=1739319137-RVF6P16oOGl42XaZxhPnywW8IIUM2W2n-0-b46e0360a725bad965c2921bae406744)
在开发模式下,Quarkus启用了代码的自动热部署。当Java源代码或资源文件发生了修改之后,只需要刷新页面或重新访问服务,Quarkus会在后台编译Java代码,然后重新部署应用,再使用部署之后的应用来处理请求。这种热部署的方式为开发人员提供了良好的开发体验,不再需要手动地重启服务器来测试改动之后的代码。如果代码编译或重新部署时产生了错误,错误信息会出现在控制台,也会显示在页面中。由于需要进行热部署,在代码修改之后的第一个访问请求的处理时间会较长。
默认情况下,开发模式下的Quarkus应用运行在localhost上,只允许在本机访问。如果希望在其他主机上也能访问,可以使用系统属性debugHost来设置,如下面的代码所示。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/36_02.jpg?sign=1739319137-hHIh4tLjD7mPL36720V7M3Bb14mhSLbv-0-a0967ff9feafbd0f6e9531d837ff8eff)
在开发模式下,Quarkus还提供了Web界面来获取应用的内部信息,并可以对应用进行修改。该Web界面的默认访问地址是http://localhost:8080/q/dev/。图2-2展示了Quarkus开发界面的截图。该开发界面是可扩展的,不同的扩展都可以提供相关的界面。该界面的实际展示内容取决于应用所添加的扩展。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/36_03.jpg?sign=1739319137-wiKmvfjZzyrQOg8B3MJoopSGikF5CAFm-0-f68f784390cd12f5b2f150dbe6bfbf25)
·图2-2 Quarkus的开发界面
2.2.2 调试应用
在开发模式下,Quarkus应用默认启用了Java远程调试支持,并在端口5005运行。在IntelliJ IDEA中,只需要创建一个远程调试的调试配置,并连接到端口5005即可。
如果在一台机器上同时运行多个Quarkus应用,需要为每个应用分别指定调试服务的端口号,否则只有第一个启动的应用可以被调试。Quarkus应用的调试行为可以通过系统属性debug来调整。该属性的可选值如表2-1所示。
表2-1 系统属性debug的可选值
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_01.jpg?sign=1739319137-jMPMPJCjo5XKZyLOIu5L9dt2qUg29BZ5-0-2a65ee5e299771003ad498302e0f4c37)
下面的命令使用5006作为调试端口。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_02.jpg?sign=1739319137-ozrLHsv60Op7U8SMQURPjNgx08ukUrYs-0-fe66c94d1bd0c308e01e978be0c91d4d)
如果要调试的代码运行在应用的启动阶段,最好的做法是以暂停模式启动应用。在暂停模式下,应用的启动会被暂停,直到有客户端连接到调试服务器。这样可以保证不会错过任何添加的调试断点。
通过系统属性suspend可以设置是否启用暂停模式。当该值为y或true时,启用暂停模式;当值为n或false时,禁用暂停模式。下面的命令以暂停模式在5006端口进行调试。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_03.jpg?sign=1739319137-0ZCmwLUxOfsPl9jOqSHlW7YGhuzIYqqU-0-5bca26c4f6506feaa5db986828b9e38d)
2.2.3 实用的插件命令
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_04.jpg?sign=1739319137-1sSTMwTAqHJiJn2KsOyHp2BzGMFuLZ8b-0-42ed34236d118078f98b7e4e89d28708)
Quarkus的Maven插件提供了很多实用的命令。除了之前介绍的create、dev和build之外,下面介绍其他的命令。
1 查看全部扩展
除了在code.quarkus.io网站查看全部的扩展之外,还可以使用下面的命令列出全部可用的扩展。对于每个扩展,会列出它的名称和标识符。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_05.jpg?sign=1739319137-xaZLxiCD3oLibLZ0Z4SHDsR73bgIqN1N-0-214ed6ff9c0d99895a1bf095df0ebff9)
如果想查看扩展的更多信息,可以添加参数-Dquarkus.extension.format=full。在运行下面的命令时,会输出扩展的描述信息。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/37_06.jpg?sign=1739319137-tVHKzNHy9lFcU8m2G0k8g55iNtvMNb1Y-0-4aba6237b2602a82f2a94bba2428c906)
2 添加和删除扩展
Quarkus应用可以随时添加和删除所用的扩展。Maven插件的命令add-extension和add-ex-tensions可以添加新的扩展。在添加时需要指定扩展的标识符。可以从list-extensions命令的输出中查看扩展的标识符。下面的命令展示了添加扩展的用法。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/38_01.jpg?sign=1739319137-4zhcydfRmV5e79c0zNYW4XxGg7lkhIse-0-674bc90a42d894d472a45dcb5f79a405)
与add-extension和add-extensions命令相对应的remove-extension和remove-extensions命令用来删除扩展,同样需要提供扩展的标识符。下面的命令展示了删除扩展的用法。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/38_02.jpg?sign=1739319137-p7srLSTqiau0QiPRO9FhGB9STrsIIJQo-0-bb0a690091280033c4a6f9299f47f320)
除了使用Maven插件的命令之外,也可以直接在POM文件中添加和删除扩展相关的依赖声明。比如,只需要在POM文件中添加下面代码中给出的依赖声明就可以启用扩展grpc。上面介绍的Maven插件的命令实际上也是在修改POM文件。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/38_03.jpg?sign=1739319137-ATo5VruJp5X3rHeYp4ER5pFToyHqxJMJ-0-d5debc8dab70e467c83bf861be81a621)
Quarkus框架提供的标准扩展的Maven工件的groupId是io.quarkus,而artifactId都以quarkus-作为前缀。在后续的章节中介绍扩展的名称时,都会忽略该前缀。
3 列出可用的平台
可以使用下面的命令列出全部可用的平台。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/38_04.jpg?sign=1739319137-Uiou76qCoUxGW4wSVME8jFiNQtiYImPO-0-7eeaed8ac1d7aa832769727abd2d1e20)
上述命令的执行结果如下所示。目前有两个可用的Quarkus平台。第一个quarkus-universe-bom是绝大多数应用使用的平台;第二个quarkus-bom只包含了Quarkus的核心扩展。
![](https://epubservercos.yuewen.com/FA8305/21511157508183006/epubprivate/OEBPS/Images/38_05.jpg?sign=1739319137-TfnBnZp2zN3iDfGNeSE2b0T3IGHtF13U-0-cf34b98d88e500fe5a212241c598c68c)