热部署Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

一文带你认识热部署、附实验结果

 

本文所诉热部署不包含前端,仅对服务端的一些热部署做些简要说明!

热部署

每次修改代码(以及修改配置文件)都要重启,是不是很烦、讲真你的服务涉及第三方服务过多时、要加载时初始化一些数据的时候,你搞热部署也不见得能省多少时间,但是你可以配置下其他目录exclude!

原理

使用了两个ClassLoader,一个(base ClassLoader)加载不会改变的类(依赖的jar包)、exclude的目录等。另一个restart ClassLoader 加载会更改的文件,这样在有代码更改的时候,原来的 restart ClassLoader 被丢弃,重新创建一个restart ClassLoader。由于需要加载 的类相比较少,所以重启时间更短些,所以重启较快。 简而言之,加载的更少自然重启的更快!

工具包 dev-tools

监听classpath下的文件变动,若有变动,当IDEA被浏览器遮挡时会自动触发重启、或者切换到受影响的类(import 变化的类的类)的页面时也会自动触发重启!

 

自动编译——需要注意的几点

我的IDEA是2018,其他版本界面可能会有不同,但设置的内容是一致的!

  • 1、勾选 Buid Project automatically

  • 2、勾选 Compiler autoMake allow when app running

 

 

  • 3、依赖必不可少

 

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

<build>
    <fileName>你自己的工程名字<fileName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
    </plugins>
</build>
 

需依赖starter-web、不然可能重启失败、也可以maven刷新导包解决

或者主启动类头上加上注解: @EnableAutoConfiguration 可解决ApplicationContextException

 org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

  • 4、自动编译快捷键

如果没有勾选、那么自动编译可通过 快捷键 Ctrl + F9 触发自动编译

排除不需重新加载的文件或者目录

 

禁用重启

       如果不想使用重新启动功能,则可以使用该spring.devtools.restart.enabled属性将其禁用。

      主启动类中设置属性为 false即可、或者配置文件中设置!

System.setProperty("spring.devtools.restart.enabled", "false");

 

局限性:

       重新启动功能不适用于使用标准反序列化的对象ObjectInputStream。如果你需要反序列化的数据,你可能需要使用Spring的ConfigurableObjectInputStream结合Thread.currentThread().getContextClassLoader()

 

本地使用有效、当打jar包时、热部署自动失效!!!

 

更多内容 请查看官方文档!

 

启动时间对比:未使用(43.712s) 热部署(21.279s)

热部署启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值