SpringBoot-热部署

SpringBoot的热部署有两种方式:

①springloaded

②spring-boot-devtools

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

步骤:

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

<plugin>

              <groupId>org.springframework.boot</groupId>

              <artifactId>spring-boot-maven-plugin </artifactId>

              <dependencies> 

             <!--springloaded  hot deploy --> 

             <dependency> 

                 <groupId>org.springframework</groupId> 

                 <artifactId>springloaded</artifactId> 

                 <version>1.2.4.RELEASE</version>

             </dependency> 

          </dependencies> 

          <executions> 

             <execution> 

                 <goals> 

                     <goal>repackage</goal> 

                 </goals> 

                 <configuration> 

                     <classifier>exec</classifier> 

                 </configuration> 

             </execution> 

           </executions>

</plugin>

(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)、添加依赖包:

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

            <optional>true</optional>

           <scope>true</scope>

</dependency> 

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

<build>

  <plugins>

      <plugin>

              <groupId>org.springframework.boot</groupId>

              <artifactId>spring-boot-maven-plugin</artifactId>

              <configuration>

<!--fork :  如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->

                  <fork>true</fork>

              </configuration>

          </plugin>

  </plugins>

   </build>

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

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

②是否加入plugin以及属性<fork>true</fork>

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值