SpringBoot构建微服务实战 之 热部署(-)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012437781/article/details/83621882

本小结主要学习下Spring boot实现热部署的两种方式,这两种方法分别是使用 Spring Loaded和使用spring-boot-devtools进行热部署。

  • 什么时热部署

    大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class 文件,这个文件里记录着和代码等对应的各种信息,然后 Class 文件将被虚拟机的 ClassLoader 加载。

    而热部署正是利用了这个特点,它监听到如果有 Class 文件改动了,就会创建一个新的 ClaassLoader 进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

  • 类加载机制
    Java 中的类经过编译器可以把代码编译为存储字节码的 Class 文件,该 Class 文件存储了各种信息,最终要加载到虚拟机中运行使用。

    类加载机制(摘自《深入理解 Java 虚拟机》)

    虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型。

  • Spring Boot 实现热部署

    • 使用 Spring Loaded
      • 在pom文件中添加以下依赖

        <build>
         <plugins>
         <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <dependencies>
           <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.6.RELEASE</version>
           </dependency>
          </dependencies>
         </plugin>
         </plugins>
        </build>
        

        这次启动不能直接运行 main 方法了,需要使用
        mvn spring-boot:run 启动,然后随意在代码中写一个 System.out.println(“Hi”) ,再次调用那个方法,会发现控制台会打印出 Hi。

  • 使用 spring-boot-devtools

    • 在pom文件中添加以下依赖

      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-devtools</artifactId>
       <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
      </dependency>
      

      如果我们想指定让 devtools 监听指定文件夹,那么可以在 application.yml 配置
      spring.devtools.restart.additional-paths=your path,注意这里需要改成 yml 文件的格式。

小结

若使用了Ehcache作为缓存在SpringBoot实现热不部署时可能会出现一些异常。一些异常案例请看本系列。

猜你喜欢

转载自blog.csdn.net/u012437781/article/details/83621882