idea热加载,小锤子

目录

一、首先解决 热部署 和 热加载的区别

二、IDEA + Spring Boot 的2种热加载方案

1.spring-boot-devtools

 2.IDEA 热加载-推荐


一、首先解决 热部署 和 热加载的区别

热部署:就是容器状态在运行的情况下部署或者重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况.
热加载:就是容器状态在运行的情况下重新加载改变编译后的类.在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。因为内存无法转变成对像. 一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的。在中模式最好是在调试过程中使用,免得整个项目加载.

二、IDEA + Spring Boot 的2种热加载方案

参考: https://blog.51cto.com/u_15310381/3200103

1.spring-boot-devtools

在项目中,我们需要在 pom.xml 中,引入 spring-boot-devtools 依赖如下:


 
 
  1. <dependency >
  2. <groupId >org.springframework.boot < /groupId >
  3. <artifactId >spring-boot-devtools < /artifactId >
  4. < optional > true < / optional > <!-- 可选 -- >
  5. < /dependency >


下面,我们来演示下 spring-boot-devtools 的使用。

① Run 或者 Debug 运行 Spring Boot 应用。

使用浏览器,访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "echo"。

② 修改 DemoController 的 #echo() 方法,设置返回值为 "none"。

【关键】 我们现在仅仅需要修改了 Java 代码,需要重新编译下代码。点击 IDEA 的菜单 Build -> Build Project,手动进行编译。如下图所示:“


友情提示:如果胖友嫌弃鼠标操作太慢,可以使用 Build Project 的快捷键:

Mac:Command + F9
Windows:Ctrl + F9
此时,IDEA 控制台会看到 Spring Boot 重新启动的日志如下:


 
 
  1. 2020- 02- 09 09: 22: 52.082 INFO 36495 --- [ Thread-10] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
  2. . ____ _ __ _ _
  3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  6. ' |____| .__|_| |_|_| |_\__, | / / / /
  7. =========|_|==============|___/=/_/_/_/
  8. :: Spring Boot :: (v2. 2.4. RELEASE)
  9. 2020- 02- 09 09: 22: 52.195 INFO 36495 --- [ restartedMain] cn.iocoder.demo03.Demo03Application : Starting Demo03Application on MacBook-Pro-8 with PID 36495 (/Users/yunai/Downloads/demo03/target/classes started by yunai in /Users/yunai/Downloads/demo03)
  10. 2020- 02- 09 09: 22: 52.195 INFO 36495 --- [ restartedMain] cn.iocoder.demo03.Demo03Application : No active profile set, falling back to default profiles: default
  11. 2020- 02- 09 09: 22: 52.335 INFO 36495 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
  12. 2020- 02- 09 09: 22: 52.336 INFO 36495 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
  13. 2020- 02- 09 09: 22: 52.336 INFO 36495 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30]
  14. 2020- 02- 09 09: 22: 52.342 INFO 36495 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
  15. 2020- 02- 09 09: 22: 52.342 INFO 36495 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 145 ms
  16. 2020- 02- 09 09: 22: 52.382 INFO 36495 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
  17. 2020- 02- 09 09: 22: 52.409 INFO 36495 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
  18. 2020- 02- 09 09: 22: 52.418 INFO 36495 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
  19. 2020- 02- 09 09: 22: 52.419 INFO 36495 --- [ restartedMain] cn.iocoder.demo03.Demo03Application : Started Demo03Application in 0.244 seconds (JVM running for 169.162)
  20. 2020- 02- 09 09: 22: 52.420 INFO 36495 --- [ restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged

 所以 spring-boot-devtools 真的不是热部署,而是更快的重启方式。
使用浏览器,再次访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "none",成功!


咳咳咳,下面我们来讲解下自动编译。艿艿自己尝试了,亲测失败。例如说 《IDEA 配置 Spring Boot 热更新,无需手动按 ctrl+F9》 文章。看了下评论,貌似其它人也存在失败的情况。

反正这里也写下步骤,胖友可以自己尝试一波~万一成功了,请一定留言,我好找找具体原因。

③ 可能有胖友会觉得手动 Build Project 有点麻烦,IDEA 还提供的自动编译的选项。设置方式,点击 IDEA 的菜单 IntelliJ IDEA -> Preference...,然后选择 Compiler 选项卡,将 Build project automatically 勾选上。如下图所示:


友情提示:注意,Build project automatically 后面的一行提示,自动编译仅在项目不处于运行,或者处于 Debug 运行中时,才会自动生效。

所以一定要 Debug 运行 Spring Boot 项目。具体的效果,胖友自己重复 ① ② 两个步骤,自己尝试下。

另外,网上我们会看到教程,建议将 compiler.automake.allow.when.app.running 勾选上。

原因是,自动编译在 Running 运行中默认是不生效的,通过勾选上 compiler.automake.allow.when.app.running,允许在 Running 运行中也生效。
个人建议的话,不要勾选。如果 Running 运行中修改了代码,也会导致热部署,不太合适。如果真要热部署,使用 Debug 运行项目更合理。

 2.IDEA 热加载-推荐

IDEA 提供了 HotSwap 插件,可以实现真正的热加载。如下图所示:

3.1 演示
下面,我们来演示下 HotSwap 插件的使用。

① Run 或者 Debug 运行 Spring Boot 应用。

使用浏览器,访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "echo"。

② 修改 DemoController 的 #echo() 方法,设置返回值为 "none"。

【关键】 我们现在仅仅需要修改了 Java 代码,需要重新编译下代码。点击 IDEA 的菜单 Build -> Build Project,手动进行编译。如下图所示:


友情提示:如果胖友嫌弃鼠标操作太慢,可以使用 Build Project 的快捷键:

Mac:Command + F9
Windows:Ctrl + F9
此时,我们在 IDEA 中可以看修改的类被重载的提示。如下图所示:

使用浏览器,再次访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "none",成功!

③ 尝试将 Build project automatically 勾选上,希望实现自动编译,再搭配上 HotSwap 插件的热部署,岂不是更香?!

结果失败,和「2.1 演示」出现一样的问题,略微蛋疼。

这里我们来换一种方式,也能实现自动编译。操作步骤如下图:

要注意,需要焦点从 IDEA 离开。例如说,在我们修改完接口的代码之后,可能会切换到浏览器或者 Postman 对该接口进行测试,此时 IDEA 就会自动更新代码和资源,进行热部署。
现在,我们来 修改 DemoController 的 #echo() 方法,设置返回值为 "todo"。

切换到浏览器再赶紧切换到 IDEA 中,以达到 IDEA 失去焦点的效果。我们在 IDEA 中可以看修改的类被重载的提示。如下图所示:

使用浏览器,再次访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "todo",成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:在使用IDEA创建Spring Boot项目时,每次修改代码都需要重新启动项目,这样非常不方便。为了解决这个问题,我们可以在IDEA中进行部署,也就是加载,它可以自动帮助开发者重启Spring Boot项目,以实现修改代码后能够实时看到新效果的目的。\[1\] 引用\[2\]:要设置加载,首先需要理解部署和加载的区别。部署是在容器运行状态下部署或重新部署整个项目,一般会清空整个内存并重新加载。而加载是在容器运行状态下重新加载已经改变编译后的类,内存不会清空,也不会丢失session,但可能会导致内存溢出或找不到方法。为了设置加载,可以在调试过程中使用,避免整个项目重新加载。\[2\] 引用\[3\]:在IDEA中设置加载的步骤如下: 1. 添加部署框架支持。 2. 开启IDEA的自动编译。 3. 开启运行中的部署配置。 4. 对于IDEA 2021.2之前的版本,进行相应的配置。 5. 对于IDEA 2021.2之后的版本,使用debug而不是run来启动项目。 具体的设置步骤可以参考相关文档或教程。\[3\] 所以,要在IDEA中设置加载,你可以按照上述步骤进行操作。 #### 引用[.reference_title] - *1* *3* [IDEA 部署(加载)](https://blog.csdn.net/m0_46468731/article/details/125928336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [idea中springboot项目设置加载、实时加载](https://blog.csdn.net/beiback/article/details/125434421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值