<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ā),官方熱部署神器真帶勁!

          共 7193字,需瀏覽 15分鐘

           ·

          2021-04-18 18:53

          平時使用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

          有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

          歡迎大家關(guān)注Java之道公眾號


          好文章,我在看??

          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  爱草逼爱草逼爱草逼爱草逼爱草逼爱草逼爱草逼 | 特级AAAA毛片 | 欧美成人生活片一区三区 | 91日韩在线视频 | 欧美激情视频一区二区三区不卡 |