Spring的IOC设计思想,导致应用重启时大量bean被创建,从而项目越大启动速度越慢。
大型项目,改动一两行代码,重启几分钟是常态。
为了改变这一问题,利用JVM的字节码替换技术,可以做热更新或代码热交换。
- 完整的解决方案,可以使用JRebel。Jrebel是付费的,网上有破解,使用一段时间配置也是蛮麻烦,暂时放弃。
- SpringBoot本身提供了一个小工具 spring-boot-devtools
Maven引入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Gradle引入:
dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
}
触发重启
- 在Eclipse中,保存修改后的文件将导致类路径被更新并触发重新启动。
- 在IntelliJ IDEA中,构建项目(
Build +→+ Build Project
)具有相同的效果。 - 如果使用构建插件,
mvn compile
则为Maven或gradle build
Gradle运行将触发重新启动。
# 排除资源,修改资源后不重启
spring.devtools.restart.exclude=static/**,public/**
# 禁用重启
spring.devtools.restart.enabled =false
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}