最近想新写一个关于spring boot的专栏,内容其实已经积攒很久了,但是最近才有时间慢慢地更新。
第一篇文章,我不想只单纯讲Spring Boot的hello world,也不想类似于大多书籍开头讲一大堆关于spring的概念,甚至什么IOC、AOP。大多数小白最有成就感的事往往是看到localhost出现自己想要的,而不是花大功夫去了解一些基础概念。概念放到后面会循序渐进地引入,但是一开始还是讲讲上手的事。
什么是热部署
之前有稍微了解过Spring boot的人都知道,如果没有设置热部署,那么每次我们在源码中进行修改之后,必须要重启应用服务才能看到我们修改后的功能,这一过程是非常浪费时间的,这也就导致了开发低效。
再来解释热部署就好理解了,所谓的热部署:就是在应用正在运行的时候升级软件,却不需要重新启动应用。简单来说就是启动服务后不论怎么修改源码,只需要在浏览器刷新一下就能出现修改后的界面。
不熟悉SpringBoot也没关系,就很类似于flask中设置debug=True
,在效果上是一样的,避免了重启消耗的时间。
讲清楚了热部署的定义,再来看看如何在Spring Boot中实现热部署。
实现
在开发中进行热部署,最简单的方式就是添加spring-boot-devtools依赖。 当我们不使用模版引擎的时候(现在大多数是前后端分离,模版引擎应该使用的不会太多),只用把注意力放到后端程序的热部署。
- 新建一个热部署springboot项目,新建的时候添加好相应的依赖。 file->new->project
选择Spring Initializr,然后next。 下一步里面自己修改想要的Name以及java版本,接着next
- 剩下的操作其实很简单,需要什么依赖就勾选什么,这次我们需要热部署,所以DevTools需要选上,Lombok啥的看个人需要。然后web里面把Spring web选上,有些关于Spring Boot的starters的内容以后会涉及到,现在只需要知道有了它项目就可以自动关联相关依赖就行。 然后next,修改一下项目名直接Finish。这样一个新的Spring boot项目就算搭好了。
- 修改IDEA中的一些配置 setting中在compile里设置
ctrl + shift + alt + / (Mac中command+shift+option+/),选择Registry,勾上 Compiler autoMake allow when app running
]
- 启动应用,然后修改看看效果 在src/main/java/com.example.demo下新建Controller文件夹,关于MVC也是后面的内容,现在只需要这样做就行啦。 然后在Controller中新建TestDevToolsController类,代码如下
package com.example.demo.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestDevToolsController { @RequestMapping("/testDevTools") public String testDevTools(){ return "test DevTools 122"; } } 复制代码
然后启动application
实现原理
spring-boot-devtools依赖最重要的功能就是自动实现将修改后的代码更新到最新的应用上,工作原理简单来说就是将未修改的类和存在修改的类分开加载,那么在有修改的时候就只需要重新加载那些被修改的类,而不是整个项目,这样就实现了项目较快的重启。
结果
打开localhost:8080/testDevTools 显示如下
现在把TestDevToolsController中改为 return "test DevTools 123"; 刷新浏览器,页面一闪就会返回修改后的内容
这样就不仅仅学会了spring boot的hello world,同时还学会了添加依赖和热部署,小有成就之后再慢慢面对那些复杂的概念吧。