SpringBoot项目在IntelliJ IDEA中实现热部署

2018-09-06  本文已影响0人  你慧快乐

开发时如果不能实现热部署其实是件挺坑爹的事情,每次修改点东西还必须要手动重启,也影响开发效率和进度。
下面就说下在Idea中依托maven项目怎么实现热部署
第一:快捷键CTRL + SHIFT + A,输入 make project automatically,进入后勾选此选项,确定并推出。
第二:CTRL + SHIFT + A,输入Registry,找到并勾选compiler.automake.allow.when.app.running,直接关闭即可
第三:在项目中添加依赖

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

添加插件支持:

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

按照以上步骤已经可以实现项目在修改后会自动重启了,特别指出,在修改类文件和配置文件后,应用会重启,修改页面并不会让应用重启,但是会应用最新的修改。
默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载,这是应为devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新
也可指定重启的目录,哪些目录文件修改重启以及排除修改重启

#开启热部署
spring.devtools.restart.enabled= true
#设置重启的目录
spring.devtools.restart.additional-paths= src/main/java
#设置文件修改不重启,相对于classpath
spring.devtools.restart.exclude= WEB-INF/**

其原理是使用了多个ClassLoader,devtools监听文件的改动,发现有更改后即会重新创建一个ClassLoader替换之前的ClassLoader,我们从启动日志信息里也可看出来。


不使用devtools 使用devtools

可以看出,使用devtools后启动线程名称从main变为restartedMain,而且还使用LiveReload server来实现重新加载

上一篇下一篇

猜你喜欢

热点阅读