SpringBoot-热部署

SpringBoot的热部署有两种方式:

①springloaded

②spring-boot-devtools

一、springloaded方式(本地实验失败)

步骤:

(1)、在pom文件中添加依赖包:

              org.springframework.boot

              spring-boot-maven-plugin

               

              

              

                 org.springframework 

                 springloaded 

                 1.2.4.RELEASE

              

           

           

              

                  

                     repackage 

                  

                  

                     exec 

                  

              

          

(2)、在Maven启动方式中使用spring-boot:run 来启动项目。

但是这么做会有个缺点:当在eclipse中关闭项目时,实际上并不会关闭进程,要在任务管理器中将进行进程关闭才可以重新启动。

解决办法:把Spring-loader-1.2.4.RELEASE.jar下载下来,放到项目lib目录中,然后在app启动项右键run as中的配置中 添加

-javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify

命令。然后启动就可以解决问题。

尽管如此,但是springloaded方式还有个缺点:当我们往类里面添加新的方法的时候,热部署会失败。于是引入第二种方法:spring-boot-devtools

实验失败尝试解决手段:

修改Maven配置文件,将jdk版本设置为1.8(无效)

检查是否开启自动编译(已开启,无效)

检查是否书写错误(检查无效)

原因不明。。。。。。

二、spring-boot-devtools

介绍:spring-boot-devtools是一个为开发者服务的模块,其中最重要的功能是自动应用代码更新到最新的app中。原理是在发现代码有改变之后,重新启动应用,但是速度比手动停止后再启动要快,快的原因并不是节省了手动操作的时间,其深层原理如下。

原理:spring-boot-devtools使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方jar包),另一个ClassLoader加载会改变的类,称为restar ClassLoader,这样在代码更改的时候,原来的restar ClassLoader被丢弃,重新创建一个新的 restarClassLoader,由于加载的类更少,所以实现了较快的启动速度(5S内)。

说明:

①devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。

②devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在allication.properties文件中配置spring.thymeleaf.cache=false来实现(注意这里不同的模版配置不一样))。

修改类-->保存:会重启

修改配置文件-->:会重动

修改页面-->:会重启,页面会刷新(spring.thymeleaf.cache=false时有效)

步骤:

(1)、添加依赖包:

            org.springframework.boot

            spring-boot-devtools

            true

           true

 

(2)、添加spring-boot-maven-plugin:

 

     

              org.springframework.boot

              spring-boot-maven-plugin

             

                  true

             

         

 

  

三、spring-boot-devtools热部署失败常见问题:

①对应的spring-boot版本是否正确,这里使用的是1.4.1版本;

②是否加入plugin以及属性true

③Eclipse Project 是否开启了Build Automatically(我自己就在这里栽了坑,不 知道为什么我的工具什么时候关闭了自动编译的功能)。

④如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。

 

你可能感兴趣的:(SpringBoot)