目录

spring boot devtools 开发人员工具

IDEA + spring-boot-devtools 热部署

IDEA + springloaded 热部署

IDEA 同一应用多实例启动


Spring boot devtools 开发人员工具

1、spring boot devtools 模块可以包含在任何项目中,以提供额外的开发时功能。

2、官网:Spring Boot Reference Guide

3、官网常用属性配置:spring-boot/DevToolsProperties.java at v2.1.15.RELEASE· GitHub

# DEVTOOLS (DevToolsProperties)
spring.devtools.add-properties=true #是否启用开发属性默认值。
spring.devtools.livereload.enabled=true # 是否启用livereload。com兼容服务器。
spring.devtools.livereload.port=35729 # 服务器端口。
spring.devtools.restart.additional-exclude= #触发完全重启时应排除的其他模式。
spring.devtools.restart.additional-paths= # 用于监视更改的其他路径。
spring.devtools.restart.enabled=true # 是否启用自动重启。
spring.devtools.restart.exclude=META-INF/maven/**,META-INF/resources/**,resources/**,static/**,public/**,templates/**,**/*Test.class,**/*Tests.class,git.properties,META-INF/build-info.properties # 应排除触发完全重新启动的模式。
spring.devtools.restart.log-condition-evaluation-delta=true #是否在重新启动时记录条件评估增量。
spring.devtools.restart.poll-interval=1s # 轮询类路径更改之间等待的时间量。
spring.devtools.restart.quiet-period=400ms # 触发重新启动之前,在没有任何类路径更改的情况下所需的静默时间量。
spring.devtools.restart.trigger-file= # 更改时触发重新启动检查的特定文件的名称。如果未指定,任何类路径文件更改都会触发重新启动。

IDEA + spring-boot-devtools 热部署

1、IDEA 编写 Spring Boot 项目时,修改前端 html、js、css 等文件,或者后端 java 文件,浏览器无法实时访问修改后的内容时,此时可以设置热部署

2、修改 pom.xml 文件:在 pom.xml 文件 <dependencies> 中添加热部署依赖<plugins> 中设置插件 fork 为 true

    <dependencies>
        <!--添加热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <true 表示依赖不传递>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--热部署配置-->                
                <!--fork:让Maven新开一个JVM进行编译,否则整个devtools可能会不生效-->
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

3、设置 IDEA 自动编译:File—> Settings—>Build...-> Compiler 勾选 Build Project automatically(IDEA 旧版是 Make project automatically)。有时候勾选了之后,修改 .java 文件内容后并没有实时的自动编译,此时可以在需要编译的时候按 Ctrl + 9 或者 Build -> Build Project(编译项目),或者 Rebuild Project(重新编译项目)

4、按快捷键 "ctrl + shift + alt + /",选择 Registry ,然后勾选 Compiler autoMake allow when app running(应用程序运行时允许编译器自动生成)。

 5、设置完成之后,修改后端代码后,比如新增方法,spring-boot-devtools 会监测 classpath 下的文件是否发生变化,如果发生变化,则会自动重启应用(修改前端代码不需要重启),所以个人建议热部署时可以关闭自动编译,改为手动按 Ctrl + 9 快捷键编译,否则随便修改一点代码,自动编译导致服务器自动重启了,很麻烦。

6、spring-boot-devtools 热部署方式的自动重启,属于比较快速的重启,与直接手动点击重启按钮是不一样的,所以如果应用中使用了 TCP、UDP 等等绑定了监听端口,则自动重启时可能会产生端口冲突。

7、默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public 这些静态资源目录下的文件修改不会使应用重启,但是会重新加载(配置文件修改会自动重启,比如 application.yml)。

IDEA + springloaded 热部署

1、上面 spring-boot-devtools 方式的缺陷是修改后端代码后服务要自动重启,当程序比较大,启动时间比较长时,这也是能以忍受的,而  springloaded 刚好能解决这个问题。

2、Spring Loaded 是一个用于在 JVM 运行时重新加载类文件更改的 JVM 代理,允许动态修改代码并实时加载生效。

3、springloaded  同样会监控 classes 文件,当有文件被改动时,系统会重新加载类文件,不用重启服务。

4、设置 IDEA 自动编译:File—> Settings—>Build...-> Compiler 勾选 Build Project automatically(IDEA 快捷键:重新编译文件 Ctrl+Shift+F9,编译项目 Ctrl+F9)

5、引用 springloaded 依赖:

        <!-- springloaded 热部署-->
        <!-- https://mvnrepository/artifact/org.springframework/springloaded -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
            <!--打包时不用带出-->
            <scope>provided</scope>
        </dependency>

在线演示源码:pom.xml · 汪少棠/java-se - Gitee

6、添加启动参数:打开 Edit Configurations 配置,在 VM options 中指定本地下载好的 springloaded 代理(标绿色的路径以实际为准):

-javaagent:D:\software\mavenRepository\org\springframework\springloaded\1.2.8.RELEASE\springloaded-1.2.8.RELEASE.jar -noverify

7、某些特殊情况下,可能仍然需要重新启动服务,比如:
(1)第三方注解的修改不能自动加载,比如 @RequestMapping 上的 url 路径变化了.
(2)application.properties, yml 配置文件的修改
(3)log4j 等配置文件的修改不能即时生效。

IDEA 同一应用多实例启动

1、很多的时候,我们需要在 IDEA 工具中对一个 Java 应用启动多次,比如分布式开发测试、集群开发测试等,它们的业务代码都完全一样,如果写多份完全有点多余,这是可以通过 IDEA 进行设置从而启动多份。

2、本文演示环境:Java JDK 1.8 + IDEA 2018 + Spring Boot 2.1.3。操作步骤如下:

  • 1) 打开 Run -> Edit Configurations.,进入 Run/Debug Configurations 面版
  • 2)勾选右上角的 "allow runing in parallel",表示 "允许并行运行"。它默认是不允许并行运行的。
  • 3) 然后修改全局配置文件(其中端口必须修改,否则启动时发生冲突导致失败),再次启动。

注意事项:IDEA 中应用多实例并行启动时,需要关闭 Spring Boot 项目自动编译刷新 中的热部署,否则配置文件中修改端口,新启动实例的时候,原先的实例因为热部署检测到资源文件变化也会自动重启,从而导致多实例启动失败!

方式2:IDEA多实例启动服务.pdf。

更多推荐

IDEA + Spring boot devtools 热部署 与 多实例启动