电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于Spring Boot DevTools實現開發過程優化

瀏覽:4日期:2023-08-16 16:20:32

場景再現

某日少年收到前端同學發來的消息說聯調的接口響應異常,少年表現的很平靜,因為這種事情太平常了。于是詢問詳情之后開始打開自己的代碼查找問題所在,沒過五分鐘就發現了問題。少年修改完代碼之后將本地啟動的項目停止然后再重新啟動。由于當前的服務端項目是一個巨大的單體應用,啟動需要花三四分鐘時間,于是少年就拿出手機開始刷起朋友圈。刷著刷著(由于注意力分散不知不覺花了十幾分鐘)突然意識到項目已經重新啟動,于是通知前端同學查看效果。

分析問題

上面的場景可能對很多開發者來說感同身受,在開發中修改項目是很平常且頻繁的一件事情。當我們修改完代碼或其他文件的時候,我們會重新啟動項目來驗證修改是否真的生效(這里忽略我們編寫的測試代碼),以供前端或者其他客戶端來使用我們的修改。但是不知不覺這樣的流程浪費了我們很多時間,甚至被迫分散我們的注意力(打開社交軟件、看新聞、和同事聊天),這些問題對我們的生產力是一個極大的威脅。

spring-boot-devtools

能否有一種方案可以讓我們對項目的修改快速生效,從而節省那些我們本該可以利用的時間呢?幸好有一種工具可以解決當前所存在的問題,這就是**Spring Boot Dev Tools**。

原理簡介

您可能會說,了解Spring Boot Dev Tools的工作原理并不重要,但是由于開發過程中存在很多復雜的情況,所以了解Spring Boot Dev Tools的工作原理是對我們有幫助的。

Spring Boot Dev Tools鉤接(hooks into)到Spring Boot的類加載器中,以提供一種方法來按需重新啟動應用程序上下文或重新加載已更改的靜態文件而無需重新啟動整個應用程序。

為此,Spring Boot Dev Tools將劃分應用程序的類路徑并分配給兩個不同的類加載器:

基本類加載器(base classloader):包含一些不可變類或者幾乎不會被修改文件,例如Spring Boot JAR或第三方庫。 重新啟動類加載器(restart classloader):包含應用程序的文件,這些文件在項目開發過程中將頻繁更改

重新啟動應用程序后,現有的重新啟動類加載器將被丟棄,新的重新啟動類加載器將被啟動。這種方法意味著應用程序的重啟通常比“冷啟動”要快得多,因為基本類加載器沒有受到影響并且一直存在著。

引入依賴

當我們使用intellij IDEA的Spring Initializr創建項目時,Spring Initializr提供了內置的Spring Boot Dev Tools依賴選項,我們只需選擇它即可。

基于Spring Boot DevTools實現開發過程優化Spring Initializr中引入Spring Boot Dev Tools

Maven項目中引入Spring Boot Dev Tools

在項目的pom.xml文件中引入Spring Boot Dev Tools依賴即可

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional></dependency>

在項目中添加一個簡單的Controller

@SpringBootApplicationpublic class DevToolApplication { public static void main(String[] args) { SpringApplication.run(DevToolApplication.class, args); } @RestController public static class HelloWorld { @GetMapping('test') public ResponseEntity<?> getTest() { return ResponseEntity.ok('hello world'); } }}

啟動項目,訪問http://localhost:8080/test,返回如下:

基于Spring Boot DevTools實現開發過程優化

我們簡單修改代碼

@RestControllerpublic static class HelloWorld { @GetMapping('test') public ResponseEntity<?> getTest() { return ResponseEntity.ok('hello world after change file'); }}

運行命令mvn compile,運行完畢重新訪問http://localhost:8080/test

基于Spring Boot DevTools實現開發過程優化

可以看到,我們的更改已經生效了。

多模塊

假設現在我們的項目引用了其他項目作為子模塊

<dependency> <groupId>org.example</groupId> <artifactId>untitled</artifactId> <version>1.0-SNAPSHOT</version></dependency>

我們需要在程序運行時,對上述子模塊的修改也即時生效。

在多模塊項目中使用Spring Boot Dev Tools比單模塊項目略復雜,由于在多模塊項目中主模塊對子模塊是引用關系,并且在運行時主模塊通過引用子模塊的jar文件的形式來啟動應用程序,根據前面Spring Boot Dev Tools的原理,jar文件的加載將歸屬于基本類加載器,因此按照現在的做法無法做到子模塊的修改即時生效。

不過Spring Boot Dev Tools提供了對多模塊項目的支持,我們只需要添加簡單的配置即可實現多模塊項目的修改即時生效。

在項目的/resources中創建META-INF/spring-devtools.properties文件,并添加配置

restart.include.projectcommon=/untitled-1.0-SNAPSHOT.jar

上述配置表明重新啟動類加載器在重新啟動的時候,會加載最新的子模塊依賴,從而做到子模塊的修改即時生效。

現在子模塊中存在如下類

public class DemoA { private String name; public String getName() { return name; } public DemoA setName(String name) { this.name = name+'cgsj111'; return this; }}

主模塊中引用了上面的類

@RestControllerpublic static class HelloWorld { @GetMapping('test') public ResponseEntity<?> getTest() { DemoA demo = new DemoA(); demo.setName('demo name'); return ResponseEntity.ok(demo); }}

此時啟動應用程序,訪問http://localhost:8080/test

基于Spring Boot DevTools實現開發過程優化

可以看到響應正常返回,此時我們修改子模塊的代碼

public class DemoA { private String name; public String getName() { return name; } public DemoA setName(String name) { this.name = name+'cgsj111 After Change'; return this; }}

然后在主模塊中運行命令 mvn compile,此時再次訪問接口

基于Spring Boot DevTools實現開發過程優化

可以看到子模塊的修改已經在主模塊中即時生效了。

遠程調試

Spring Boot Dev Tools所展現的高效便捷之處不僅僅局限于本地調試,對于遠程調試也有很好的支持。選擇性地啟用遠程支持是因為啟用它可能會帶來安全風險。僅當在受信任的網絡上運行或使用SSL保護時,才應啟用它。如果這兩個選項都不滿足,則不應使用DevTools的遠程支持。您永遠不應該在生產環境中啟用他。

啟用它需要確保構建物中包含devtools,修改至如下配置:

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration><!--確保項目打包是將Devtools包含進去--><excludeDevtools>false</excludeDevtools> </configuration> </plugin> </plugins></build>

然后,您需要設置spring.devtools.remote.secret屬性。像任何重要的密碼或機密一樣,該值應唯一且強壯,以免被猜測或強行使用,例如,在application.properties中設置:

spring.devtools.remote.secret=cgsj8377

遠程devtools支持分為兩部分:接受連接的服務器端端點和在IDE中運行的客戶端應用程序。設置spring.devtools.remote.secret屬性后,將自動啟用服務器組件,客戶端組件必須手動啟動。

調試演示

在項目文件夾中運行命令 mvn package生成jar文件,將jar文件部署到服務器(在這里我們以本地運行jar包的方式來模擬遠程部署)。然后在IDE進行如下配置(以Intellij IDEA為例)

基于Spring Boot DevTools實現開發過程優化

如上圖我們添加了一個啟動器,啟動類為org.springframework.boot.devtools.RemoteSpringApplication,并且傳遞了一個程序參數來指定遠程應用程序的地址,此處筆者在本機上試驗所以是一個本機的地址。

接下來我們啟動我們剛剛創建的啟動器

基于Spring Boot DevTools實現開發過程優化

啟動日志如下

基于Spring Boot DevTools實現開發過程優化

修改代碼至如下

@RestControllerpublic static class HelloWorld { @GetMapping('test') public ResponseEntity<?> getTest() { DemoA demo = new DemoA(); demo.setName('remote test'); return ResponseEntity.ok(demo); }}

然后運行命令mvn compile,可以看到我們的更改在運行的程序中即時生效了

基于Spring Boot DevTools實現開發過程優化

總結

在我們的日常的開發過程中總會存在各種各樣的“等待”,這些時刻很大程度上會影響開發者的效率和注意力。而Developer Tools的出現緩解了這個問題,他使應用程序的調試更加的便捷高效。有一點要注意的是在讓我們的更改生效之前需要執行mvn compile命令,從而使本地代碼能被編譯成程序可以理解的字節碼文件。

本文示例代碼:https://gitee.com/jeker8chen/dev-tool

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 宜兴紫砂壶知识分享 - 宜兴壶人| 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 数字展示在线_数字展示行业门户网站 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 深圳市万色印象美业有限公司| 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 泡沫消防车_水罐消防车_湖北江南专用特种汽车有限公司 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 |