<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          加速 SpringBoot 應(yīng)用開發(fā),官方熱部署神器真帶勁!【文末送書】

          共 7978字,需瀏覽 16分鐘

           ·

          2021-05-23 20:28

          來源 | macrozheng(ID:gh_433697c99b25


          粉絲福利:感謝大家的積極參與,上次送書活動沒有中書的朋友請不要灰心,今天的活動繼續(xù)等著你~這次真不要錯過啦~

          平時使用SpringBoot開發(fā)應(yīng)用時,修改代碼后需要重新啟動才能生效。如果你的應(yīng)用足夠大的話,啟動可能需要好幾分鐘。有沒有什么辦法可以加速啟動過程,讓我們開發(fā)應(yīng)用代碼更高效呢?今天給大家推薦一款SpringBoot官方的熱部署工具spring-boot-devtools,修改完代碼后可快速自動重啟應(yīng)用!

          spring-boot-devtools簡介

          SpringBoot官方開發(fā)工具,如果你的應(yīng)用集成了它,即可實現(xiàn)熱部署和遠程調(diào)試。

          實現(xiàn)原理

          使用該工具應(yīng)用為什么啟動更快了?主要是因為它使用了兩種不同的類加載器?;A(chǔ)類加載器用于加載不會改變的類(比如第三方庫中的類),重啟類加載器用于加載你應(yīng)用程序中的類。當(dāng)應(yīng)用程序啟動時,重啟類加載器中的類將會被替換掉,這就意味著重啟將比冷啟動更快!

          熱部署

          接下來我們將集成devtools,來演示下熱部署功能。

          • 首先需要在項目的pom.xml文件中,添加devtools的依賴;
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <optional>true</optional>
          </dependency>
          • 為了方便測試,我們在項目中添加了如下測試接口;
          /**
           * Created by macro on 2021/3/25.
           */

          @Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
          @Controller
          @RequestMapping("/test")
          public class TestController {

              @ApiOperation("測試修改")
              @RequestMapping(value = "/first", method = RequestMethod.GET)
              @ResponseBody
              public CommonResult first() {
                  String message = "返回消息";
                  return CommonResult.success(null,message);
              }
          }
          • 然后啟動項目,啟動成功后通過Swagger訪問接口,返回結(jié)果如下,訪問地址:http://localhost:8088/swagger-ui.html
          {
            "code"200,
            "message""返回消息",
            "data"null
          }
          • 由于在項目構(gòu)建時,devtools才會自動重啟項目,而IDEA默認并沒有使用自動構(gòu)建,此時我們可以修改應(yīng)用啟動配置,設(shè)置當(dāng)IDEA失去焦點時自動構(gòu)建項目;
          • 修改Controller中的代碼,只要修改下message變量即可;
          /**
           * Created by macro on 2021/3/25.
           */

          @Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
          @Controller
          @RequestMapping("/test")
          public class TestController {

              @ApiOperation("測試修改")
              @RequestMapping(value = "/first", method = RequestMethod.GET)
              @ResponseBody
              public CommonResult first() {
                  String message = "返回消息(已修改)";
                  return CommonResult.success(null,message);
              }
          }
          • 失去焦點后,等待項目自動構(gòu)建,此時訪問接口出現(xiàn)404問題;
          {
            "timestamp""2021-03-29T07:09:05.415+00:00",
            "status"404,
            "error""Not Found",
            "message""No message available",
            "path""/test/first"
          }
          • 由于devtools檢測時間和IDEA的編譯所需時間存在差異,當(dāng)IDEA還沒編譯完成,devtools就已經(jīng)重啟應(yīng)用了,導(dǎo)致了這個問題,修改application.yml配置文件,添加如下配置即可;
          spring:
            devtools:
              restart:
                poll-interval: 2s
                quiet-period: 1s
          • 此時再次訪問測試接口,顯示內(nèi)容如下,修改后的代碼已經(jīng)被自動應(yīng)用了。
          {
            "code"200,
            "message""返回消息(已修改)",
            "data"null
          }

          遠程調(diào)試

          devtools除了支持熱部署之外,還支持遠程調(diào)試,接下來我們把應(yīng)用部署到Docker容器中,然后試試遠程調(diào)試!

          • 由于SpringBoot默認打包不會包含devtools,所以我們需要先修改下pom.xml
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                  <!--打包時不排除Devtools-->
                  <excludeDevtools>false</excludeDevtools>
              </configuration>
          </plugin>
          • 接下來需要application.yml文件,添加devtools的遠程訪問密碼;
          spring:
            devtools:
              remote:
                secret: macro666
          • 接下來把項目打包成Docker鏡像,然后使用如下命令運行起來;
          docker run -p 8088:8088 --name mall-tiny-devtools \
          --link mysql:db \
          -v /etc/localtime:/etc/localtime \
          -v /mydata/app/mall-tiny/logs:/var/logs \
          -d mall-tiny/mall-tiny-devtools:1.0-SNAPSHOT
          • 添加一個啟動配置,修改啟動類為org.springframework.boot.devtools.RemoteSpringApplication,配置信息具體如下;
          • 啟動該配置,控制臺輸出如下結(jié)果表示遠程連接成功;
          2021-03-29 15:49:50.991  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication v2.3.0.RELEASE on DESKTOP-5NIMJ19 with PID 7848
          2021-03-29 15:49:51.003  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : No active profile set, falling back to default profiles: default
          2021-03-29 15:49:51.664  WARN 7848 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://192.168.5.78:8088 is insecure. You should use a URL starting with 'https://'.
          2021-03-29 15:49:52.024  INFO 7848 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
          2021-03-29 15:49:52.055  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 2.52 seconds (JVM running for 4.236)
          • 接下來我們再次修改下Controller中的測試代碼,只要修改下message變量即可;
          /**
           * Created by macro on 2021/3/25.
           */

          @Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
          @Controller
          @RequestMapping("/test")
          public class TestController {

              @ApiOperation("測試修改")
              @RequestMapping(value = "/first", method = RequestMethod.GET)
              @ResponseBody
              public CommonResult first() {
                  String message = "返回消息(遠程調(diào)試)";
                  return CommonResult.success(null,message);
              }
          }
          • 遠程調(diào)試如果自動構(gòu)建的話會導(dǎo)致遠程服務(wù)頻繁重啟,此時我們可以使用IDEA手動構(gòu)建,在項目的右鍵菜單中可以找到構(gòu)建按鈕;
          • 構(gòu)建成功后可以發(fā)現(xiàn)遠程服務(wù)會自動重啟,并應(yīng)用修改后的代碼,訪問測試接口返回如下信息;
          {
            "code"200,
            "message""返回消息(遠程調(diào)試)",
            "data"null
          }

          總結(jié)

          雖說使用SpringBoot官方的devtools可以進行熱部署,但是這種方式更像是熱重啟,如果你想要更快的熱部署體驗的話可以使用JRebel。

          項目源碼地址

          https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-devtools


          ??????????

          贈書福利來襲啦

          聯(lián)合北京大學(xué)出版社為大家送福利

          本書以零基礎(chǔ)講解為宗旨,面向?qū)W習(xí)數(shù)據(jù)科學(xué)與人工智能的讀者,通俗地講解每一個知識點,旨在幫助讀者快速打下數(shù)學(xué)基礎(chǔ)。適合準(zhǔn)備從事數(shù)據(jù)科學(xué)與人工智能相關(guān)行業(yè)的讀者
          本書首先介紹算法的概念和特點,然后介紹數(shù)據(jù)結(jié)構(gòu),再逐步深入介紹各類算法,通過解決實際問題加深理解。選取了近年來比較熱門的語言Python作為載體,來實現(xiàn)算法的功能。這不但可以讓讀者系統(tǒng)地學(xué)習(xí)算法的相關(guān)知識,而且還能提高讀者對Python語言的應(yīng)用水平
          本書內(nèi)容通俗易懂,案例豐富,實用性強,立足于詳細解釋算法的原理,尤其是算法背后的數(shù)學(xué)原理,適合于有一定 編程基礎(chǔ)和算法基礎(chǔ)的讀者進階閱讀,也適合 Python程序員、Java程序員等其他編程愛好者閱讀
          本書詳細介紹了Raft的核心算法、服務(wù)器成員變更以及各種優(yōu)化的實現(xiàn),適合那些想嘗試實現(xiàn)Raft算法或者在生產(chǎn)環(huán)境加入Raft算法的人,也適合那些對于Raft算法有興趣的讀者
          本書是大數(shù)據(jù)開發(fā)領(lǐng)域中以實戰(zhàn)案例為主旨的經(jīng)典之作。全面闡述了大數(shù)據(jù)開發(fā)領(lǐng)域中常用的技術(shù)原理和框架,以及框架對應(yīng)的實戰(zhàn)案例

          #留言有禮# 以上書單喜歡嗎?分享一下你想要這本書的理由!或者你對本文的見解,活動截止時小編選出5幸運小錦鯉,送以上書籍任意一本,包郵到家~

          1、Intellij IDEA這樣 配置注釋模板,讓你瞬間高出一個逼格!
          2、吊炸天的 Docker 圖形化工具 Portainer,必須推薦給你!
          3、最牛逼的 Java 日志框架,性能無敵,橫掃所有對手!
          4、把Redis當(dāng)作隊列來用,真的合適嗎?
          5、驚呆了,Spring Boot居然這么耗內(nèi)存!你知道嗎?
          6、全網(wǎng)最全 Java 日志框架適配方案!還有誰不會?
          7、Spring中毒太深,離開Spring我居然連最基本的接口都不會寫了

          點分享

          點收藏

          點點贊

          點在看

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本驲屄视频在线高潮视频 | 成人在线亚洲色图 | 免费看一级高潮毛片 | 浪货跪趴开荤肉欲H文视频 | 日本色色图|