做网站搜爬闪,网站虚拟机从头做有影响吗,北京海淀建设支行有哪些,网站权重排行榜平时使用SpringBoot开发应用时#xff0c;修改代码后需要重新启动才能生效。如果你的应用足够大的话#xff0c;启动可能需要好几分钟。有没有什么办法可以加速启动过程#xff0c;让我们开发应用代码更高效呢#xff1f;今天给大家推荐一款SpringBoot官方的热部署工具spri…平时使用SpringBoot开发应用时修改代码后需要重新启动才能生效。如果你的应用足够大的话启动可能需要好几分钟。有没有什么办法可以加速启动过程让我们开发应用代码更高效呢今天给大家推荐一款SpringBoot官方的热部署工具spring-boot-devtools修改完代码后可快速自动重启应用spring-boot-devtools简介 SpringBoot官方开发工具如果你的应用集成了它即可实现热部署和远程调试。实现原理 使用该工具应用为什么启动更快了主要是因为它使用了两种不同的类加载器。基础类加载器用于加载不会改变的类比如第三方库中的类重启类加载器用于加载你应用程序中的类。当应用程序启动时重启类加载器中的类将会被替换掉这就意味着重启将比冷启动更快热部署 接下来我们将集成devtools来演示下热部署功能。首先需要在项目的pom.xml文件中添加devtools的依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdoptionaltrue/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)ResponseBodypublic CommonResult first() {String message 返回消息;return CommonResult.success(null,message);}
}然后启动项目启动成功后通过Swagger访问接口返回结果如下访问地址http://localhost:8088/swagger-ui.html{code: 200,message: 返回消息,data: null
}由于在项目构建时devtools才会自动重启项目而IDEA默认并没有使用自动构建此时我们可以修改应用启动配置设置当IDEA失去焦点时自动构建项目修改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)ResponseBodypublic CommonResult first() {String message 返回消息已修改;return CommonResult.success(null,message);}
}失去焦点后等待项目自动构建此时访问接口出现404问题{timestamp: 2021-03-29T07:09:05.41500:00,status: 404,error: Not Found,message: No message available,path: /test/first
}由于devtools检测时间和IDEA的编译所需时间存在差异当IDEA还没编译完成devtools就已经重启应用了导致了这个问题修改application.yml配置文件添加如下配置即可spring:devtools:restart:poll-interval: 2squiet-period: 1s此时再次访问测试接口显示内容如下修改后的代码已经被自动应用了。{code: 200,message: 返回消息已修改,data: null
}远程调试 devtools除了支持热部署之外还支持远程调试接下来我们把应用部署到Docker容器中然后试试远程调试由于SpringBoot默认打包不会包含devtools所以我们需要先修改下pom.xmlplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfiguration!--打包时不排除Devtools--excludeDevtoolsfalse/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配置信息具体如下启动该配置控制台输出如下结果表示远程连接成功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)ResponseBodypublic CommonResult first() {String message 返回消息远程调试;return CommonResult.success(null,message);}
}远程调试如果自动构建的话会导致远程服务频繁重启此时我们可以使用IDEA手动构建在项目的右键菜单中可以找到构建按钮构建成功后可以发现远程服务会自动重启并应用修改后的代码访问测试接口返回如下信息{code: 200,message: 返回消息远程调试,data: null
}总结 虽说使用SpringBoot官方的devtools可以进行热部署但是这种方式更像是热重启如果你想要更快的热部署体验的话可以使用JRebel。往期推荐SpringBoot实现Excel导入导出好用到爆POI可以扔掉了如何给SpringBoot配置轻松加密MyBatis原生批量插入的坑与解决方案