Idea实现热部署

Idea实现热部署有两种方式,互为补充。

一. SpringLoader热部署

    只能做代码热部署,不能做静态资源热部署。静态资源包括但不限于: html,css,js。SpringLoader做热部署 时有两种配置方式。

    1. 使用插件启动

        在maven的pom.xml中添加对应的依赖


        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        org.springframework
                        springloaded
                        1.2.8.RELEASE
                    
                
                
                    
                    loader.AppStarter
                
            
        
    

     其中,mainClass的路径可以不指定,但spriongloaded的依赖一定要写,否则只凭借spring-boot-maven-plugin中的spring-boot-loader无法完成热部署的功能。

     接着,在插件中通过spring-boot:run 来启动应用,即可实现热部署功能。(不能直接通过主类启动)

Idea实现热部署_第1张图片

      2. 通过代码依赖外部 jar启动

          

        在Run/Debug  Configuration-> VM options中添加内容并启动即可实现热部署:

 -javaagent:.\libs\springloaded-1.2.8.RELEASE.jar -noverify

        注意,jar包不需要add to build path。

 

     3. 注意

         Idea并没有像eclipse那样默认自动编译文件,因此需要手动开启,网上大部分人都说有两处:

         1. Compiler -> Build project automatically  打钩

         2. ctrl shift+A -> Registry -> compiler.automake.allow.when.app.running 打钩

        然而并没有用,我的Idea是2019.1,亲测上述配置无效。因此退而求其次,录制了一套保存+编译的宏命令,并设置快捷键为ctrl+s,每次修改一个类后,手动ctrl+s进行编译。

        宏的定义如下图所示:

        Idea实现热部署_第2张图片

二. DevTools

     既可以做代码热部署,也能做静态资源热部署。当实现代码热部署时,需要与springloaded搭配使用。引入springloaded的方式请参考前文,下面是DevTools集成至spring boot的方式:

     首先,在maven的pom.xml中引入DevTools依赖


        
            org.springframework.boot
            spring-boot-devtools
            
            true
        

      接着,在application.properties全局配置文件中,增加对DevTools的配置:

# DevTools热部署生效
spring.devtools.restart.enabled=true

# 设置文件内容发生变化时需要重启服务的路径  如果路径有多个,用英文逗号分隔
spring.devtools.restart.additional-paths=src/main/java

# 设置文件内容发生变化时不需要重启服务的路径
# 注意: 默认不重启服务的路径有: /META-INF/maven, /META-INF/resources,/resources,/static/templates,/public
#       不重启服务,但还是会重新加载静态内容! 也即,静态资源的热部署还是有效的
spring.devtools.restart.exclude=WEB-INF/**

    至此,针对DevTools做热部署的工作就已经完成了。

    与单纯使用springloaded不同的是,使用DevTools时,spring boot会分出名为"restartedMain"的线程去监听.class文件,如果发现有文件被修改,则会重启服务(在控console中能看到Spring上下文重启的相关信息)

你可能感兴趣的:(java,Idea)