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

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


    org.springframework.boot
    spring-boot-devtools
    true

添加插件支持:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                true
            
        
    

按照以上步骤已经可以实现项目在修改后会自动重启了,特别指出,在修改类文件和配置文件后,应用会重启,修改页面并不会让应用重启,但是会应用最新的修改。
默认情况下,/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,我们从启动日志信息里也可看出来。


SpringBoot项目在IntelliJ IDEA中实现热部署_第1张图片
不使用devtools
SpringBoot项目在IntelliJ IDEA中实现热部署_第2张图片
使用devtools

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

你可能感兴趣的:(SpringBoot项目在IntelliJ IDEA中实现热部署)