在多模块项目中使用Spring Boot Dev Tools比单模块项目略复杂,由于在多模块项目中主模块对子模块是引用关系,并且在运行时主模块通过引用子模块的jar文件的形式来启动应用程序,根据前面Spring Boot Dev Tools的原理,jar文件的加载将归属于基本类加载器,因此按照上述的做法无法做到子模块的修改即时生效。
不过Spring Boot Dev Tools提供了对多模块项目的支持,我们只需要添加简单的配置即可实现多模块项目的修改即时生效。
在项目的/resources中创建META-INF/spring-devtools.properties文件,并添加配置
restart.include.projectcommon=/common-1.0-SNAPSHOT.jar
上述配置表明重新启动类加载器在重新启动的时候,会加载最新的子模块依赖,从而做到子模块的修改即时生效。 对应的子模块pom声明:
org.hc
common
1.0-SNAPSHOT
远程调试
Spring Boot Dev Tools所展现的高效便捷之处不仅仅局限于本地调试,对于远程调试也有很好的支持。选择性地启用远程支持是因为启用它可能会带来安全风险。仅当在受信任的网络上运行或使用SSL保护时,才应启用它。如果这两个选项都不满足,则不应使用DevTools的远程支持。切记,不应该在生产环境中启用远程调试。
启用远程调试需要确保构建物中包含devtools,修改至如下配置:
org.springframework.boot
spring-boot-maven-plugin
false
然后,需要设置spring.devtools.remote.secret属性。像任何重要的密码或机密一样,该值应唯一且强壮,以免被猜测或强行使用,例如,在application.properties中设置:
spring.devtools.remote.secret=cgsj8377
远程devtools支持分为两部分:接受连接的服务器端端点和在IDE中运行的客户端应用程序。设置spring.devtools.remote.secret属性后,将自动启用服务器组件,客户端组件必须手动启动。