Spring的IOC设计思想,导致应用重启时大量bean被创建,从而项目越大启动速度越慢。
    大型项目,改动一两行代码,重启几分钟是常态。
    为了改变这一问题,利用JVM的字节码替换技术,可以做热更新或代码热交换。

    • 完整的解决方案,可以使用JRebel。Jrebel是付费的,网上有破解,使用一段时间配置也是蛮麻烦,暂时放弃。
    • SpringBoot本身提供了一个小工具 spring-boot-devtools
    1. Maven引入
    2. <dependencies>
    3. <dependency>
    4. <groupId>org.springframework.boot</groupId>
    5. <artifactId>spring-boot-devtools</artifactId>
    6. <optional>true</optional>
    7. </dependency>
    8. </dependencies>
    9. Gradle引入:
    10. dependencies {
    11. developmentOnly("org.springframework.boot:spring-boot-devtools")
    12. }

    触发重启

    • 在Eclipse中,保存修改后的文件将导致类路径被更新并触发重新启动。
    • 在IntelliJ IDEA中,构建项目(Build +→+ Build Project)具有相同的效果。
    • 如果使用构建插件,mvn compile则为Maven或gradle buildGradle运行将触发重新启动。
    1. # 排除资源,修改资源后不重启
    2. spring.devtools.restart.exclude=static/**,public/**
    3. # 禁用重启
    4. spring.devtools.restart.enabled =false
    5. public static void main(String[] args) {
    6. System.setProperty("spring.devtools.restart.enabled", "false");
    7. SpringApplication.run(MyApp.class, args);
    8. }