mvn clean package -U -DskipTests -Dquarkus.package.type=uber-jar
- 构建docker镜像
docker build -f src/main/docker/Dockerfile.19 -t bolingcavalry/quarkus-virual-threads-demo:0.0.2 .- 镜像制作成功,控制台输出如下图

文章插图
- 如果您有hub.docker.com的账号,也可以像我一样推送到公共仓库,方便大家使用
- 回顾Dockerfile中启动应用的命令,由于虚拟线程是JDK19的预览功能,因此必须添加下图红色箭头所指的--enable-preview参数才能让虚拟线程功能生效

文章插图
- 于是我就在想:不加这个参数会咋样?也就是不开启虚拟线程,但是代码中却要用它,那么真正运行的时候会如何呢?
- 瞎猜是没用的,还是试试吧,在启动参数中删除--enable-preview,如下图,再重新构建镜像

文章插图
- 像前文那样运行容器(再次提醒,确保数据库是正常的),再在浏览器访问http://localhost:8080/vt/persons/1,页面正常显示了,看来功能是不受影响的

文章插图
- 再用docker logs命令查看后台日志,如下图箭头所示,quarkus给出了WARN级别的提示:由于当前虚拟机不支持虚拟线程,改为使用默认的阻塞来执行业务逻辑

文章插图
- 小结:在不支持虚拟线程的环境强行使用虚拟线程,quarkus会选择兼容的方式继续完成任务
- 至此,一个完整的quarkus应用已开发完成,该应用使用虚拟线程来响应web请求,而且在quarkus官方还没有提供方案的前提下,咱们依旧完成了docker镜像的制作,最后,因为好奇,还关闭重要参数尝试了一下,一系列操作下来,相信您已经对基础开发了如指掌了
- 最后,还剩下两个遗留问题,相信您也会有类似困惑
- 虚拟线程和常规子线程的区别,究竟能不能看出来?前文已经验证了性能上区别不大,那还有别的方式来观察和区分吗?
- 能不能稍微深入一点,仅凭一个@RunOnVirtualThread注解就强行写了两篇博客,实在是太忽悠人了
- 以上问题会在接下来的《支持JDK19虚拟线程的web框架,终篇》得到解决,还是那句熟悉的广告词:欣宸原创,不辜负您的期待
学习路上,你不孤单,欣宸原创一路相伴...【支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用】
经验总结扩展阅读
- iphonese3支持5g吗_iphonese3是5G手机吗
- vulnhub靶场之ICA: 1
- 七海ybb是什么梗
- vulnhub靶场之THALES: 1
- 十一 Istio:向istio服务网格中引入虚拟机
- 【多服务场景化解决方案】AR虚拟技术助力智能家装
- 一加9RT支持5G吗_一加9RT支不支持5G
- 苹果11虚拟home键在哪 苹果11手机如何调出虚拟home键
- 红米k40pro有dc调光吗_红米k40pro支持dc调光吗
- OpenCore Legacy Patcher 在不受支持的 Mac 上安装 macOS Ventura、Monterey、Big Sur
