Idea实现热部署

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

一. SpringLoader热部署

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

    1. 使用插件启动

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

<build>
        <plugins>
            <!-- 想要使用springloader插件,首先必须有一个main方法,也就是应用的主入口-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.8.RELEASE</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!-- main启动类的全路径 -->
                    <mainClass>loader.AppStarter</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

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

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

      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进行编译。

        宏的定义如下图所示:

        

二. DevTools

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

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

<!-- devtools依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <!-- 子工程继承当前工程的时候,此依赖不会向下传递 -->
            <optional>true</optional>
        </dependency>

      接着,在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上下文重启的相关信息)

发布了45 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/miaomiao19971215/article/details/90343015
今日推荐