SpringBoot官方热部署和远程调试神器,真带劲! 不念不忘少年蓝@ 2023-10-02 12:57 2阅读 0赞 > 平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效。如果你的应用足够大的话,启动可能需要好几分钟。有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款SpringBoot官方的热部署工具`spring-boot-devtools`,修改完代码后可快速自动重启应用! ### `spring-boot-devtools`简介 ### SpringBoot官方开发工具,如果你的应用集成了它,即可实现热部署和远程调试。 ### 实现原理 ### 使用该工具应用为什么启动更快了?主要是因为它使用了两种不同的类加载器。基础类加载器用于加载不会改变的类(比如第三方库中的类),重启类加载器用于加载你应用程序中的类。当应用程序启动时,重启类加载器中的类将会被替换掉,这就意味着重启将比冷启动更快! ### 热部署 ### > 接下来我们将集成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访问接口,返回结果如下,访问地址:http://localhost:8088/swagger-ui.html { "code": 200, "message": "返回消息", "data": null } * 由于在项目构建时,devtools才会自动重启项目,而IDEA默认并没有使用自动构建,此时我们可以修改应用启动配置,设置当IDEA失去焦点时自动构建项目; ![a065f7dae06f0c52bcfb7b4539e25a5a.png][] * 修改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); } } * 失去焦点后,等待项目自动构建,此时访问接口出现404问题; { "timestamp": "2021-03-29T07:09:05.415+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/test/first" } * 由于devtools检测时间和IDEA的编译所需时间存在差异,当IDEA还没编译完成,devtools就已经重启应用了,导致了这个问题,修改`application.yml`配置文件,添加如下配置即可; spring: devtools: restart: poll-interval: 2s quiet-period: 1s * 此时再次访问测试接口,显示内容如下,修改后的代码已经被自动应用了。 { "code": 200, "message": "返回消息(已修改)", "data": null } ### 远程调试 ### > devtools除了支持热部署之外,还支持远程调试,接下来我们把应用部署到Docker容器中,然后试试远程调试! * 由于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`,配置信息具体如下; ![f125fd0c9ae7908d2e33682fa951a9e7.png][] * 启动该配置,控制台输出如下结果表示远程连接成功; 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 = "返回消息(远程调试)"; return CommonResult.success(null,message); } } * 远程调试如果自动构建的话会导致远程服务频繁重启,此时我们可以使用IDEA手动构建,在项目的右键菜单中可以找到构建按钮; ![1e2fd59038161986baed48e1b803599f.png][] * 构建成功后可以发现远程服务会自动重启,并应用修改后的代码,访问测试接口返回如下信息; { "code": 200, "message": "返回消息(远程调试)", "data": null } ### 总结 ### 虽说使用SpringBoot官方的devtools可以进行热部署,但是这种方式更像是热重启,如果你想要更快的热部署体验的话可以使用JRebel。 ![91b18320b9ca2a970547d5a6e23740cd.gif][] 往期推荐 [![24fc03b8f43d4f4ac8e21a1c4e734680.png][]][24fc03b8f43d4f4ac8e21a1c4e734680.png 1] [SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!][24fc03b8f43d4f4ac8e21a1c4e734680.png 1] [![56423f783c5a97b3d3c7a2688e53133e.png][]][56423f783c5a97b3d3c7a2688e53133e.png 1] [如何给SpringBoot配置轻松加密?][56423f783c5a97b3d3c7a2688e53133e.png 1] [![2ba2d077b0d8cbbfa82f43b7447f881d.png][]][2ba2d077b0d8cbbfa82f43b7447f881d.png 1] [MyBatis原生批量插入的坑与解决方案!][2ba2d077b0d8cbbfa82f43b7447f881d.png 1] [a065f7dae06f0c52bcfb7b4539e25a5a.png]: https://img-blog.csdnimg.cn/img_convert/a065f7dae06f0c52bcfb7b4539e25a5a.png [f125fd0c9ae7908d2e33682fa951a9e7.png]: https://img-blog.csdnimg.cn/img_convert/f125fd0c9ae7908d2e33682fa951a9e7.png [1e2fd59038161986baed48e1b803599f.png]: https://img-blog.csdnimg.cn/img_convert/1e2fd59038161986baed48e1b803599f.png [91b18320b9ca2a970547d5a6e23740cd.gif]: https://img-blog.csdnimg.cn/img_convert/91b18320b9ca2a970547d5a6e23740cd.gif [24fc03b8f43d4f4ac8e21a1c4e734680.png]: https://img-blog.csdnimg.cn/img_convert/24fc03b8f43d4f4ac8e21a1c4e734680.png [24fc03b8f43d4f4ac8e21a1c4e734680.png 1]: http://mp.weixin.qq.com/s?__biz=MzU1NTkwODE4Mw==&mid=2247498633&idx=1&sn=be5a55f4cd62c27514fb94b249f27d7d&chksm=fbcf96b1ccb81fa7a33c9da3bb9e6c700e4898ea3e99608d7e185ddfa5dab9eb55ed8c96e846&scene=21#wechat_redirect [56423f783c5a97b3d3c7a2688e53133e.png]: https://img-blog.csdnimg.cn/img_convert/56423f783c5a97b3d3c7a2688e53133e.png [56423f783c5a97b3d3c7a2688e53133e.png 1]: http://mp.weixin.qq.com/s?__biz=MzU1NTkwODE4Mw==&mid=2247498421&idx=1&sn=8c61e2bdb82a5e6dbf9f90ce5780b3c0&chksm=fbcf978dccb81e9bad9d136b807a22e29748f04ce84839de6becfea011dda4f7f72b909e5037&scene=21#wechat_redirect [2ba2d077b0d8cbbfa82f43b7447f881d.png]: https://img-blog.csdnimg.cn/img_convert/2ba2d077b0d8cbbfa82f43b7447f881d.png [2ba2d077b0d8cbbfa82f43b7447f881d.png 1]: http://mp.weixin.qq.com/s?__biz=MzU1NTkwODE4Mw==&mid=2247498513&idx=1&sn=24ef8a00dcd83316736d05f1a315ff9a&chksm=fbcf9629ccb81f3f67248eec552ec90b2213a3bf2af6de2939cf1b0af834b4a820d805513a2d&scene=21#wechat_redirect
还没有评论,来说两句吧...