springboot学习(八)热部署和打包

热部署

Spring Boot提供了一个开发者工具,可以监控classpath路径上的文件。只要源码或配置文件发生修改,Spring Boot应用可以自动重启,添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
</dependency>

在Intellij Idea下,还需要手动进行一些设置。首先到Files→Settings→Compiler,将Build project automatically一项勾选.

连击两次Shift键,输入Registry后找到Registry...回车,直接输入running找到complier.automake.allow.when.app.running并勾选即可,最后重启一下项目,之后对项目代码的任何更改都将被侦知并自动重新加载,无需手动重启项目

Spring Boot 中热部署最最关键的原理就是两个不同的 classloader:

  • base classloader

  • restart classloader

其中 base classloader 用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader 代替。在整个过程中,因为只重新加载了变化的类,所以启动速度要被重启快。

但是使用 devtools ,默认情况下当静态资源发生变化时,并不会触发项目重启。

打包

Spring Boot自带一个spring-boot-maven-plugin插件用来打包,我们只需要在pom.xml中加入以下配置

    <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>

无需任何配置,Spring Boot的这款插件会自动定位应用程序的入口Class,执行Maven命令即可打包,会生成两个文件:

  • .jar.original,是Maven标准打包插件打的jar包,它只包含我们自己的Class文件,不包含依赖

  • .jar,是Spring Boot打包插件创建的,包含依赖的jar和class文件,可以直接运行 java -jar xxx.jar

 

 

posted @ 2020-12-20 18:31  huiyii  阅读(130)  评论(0编辑  收藏  举报