spring-boot:run 运行的小小问题


已经多年不写 java 应用了, 但最近维护着一个旧项目,基于 jdk 11(现在已经是 jdk 24 了),使用 spring 全家桶,maven 构建工具。10 几个微服务,用户量却没多少,维护很麻烦。实在看不下去,试着改造成单体,减少维护成本。

其实,真的,现在的服务不急于都是直接上微服务,现在 单体 > 微服务 收益,以前单体弊端很大,主要是因为一个发动就得重启服务,或者一个小 bug 就导致程序崩溃,但现在得益于像 k8s 这种部署架构,可以一定程序上弥补,又可以平滑地更新服务。

更关键的是,多少数据量你真正知道吗? 也不多扯了,回归正题。

对于已经不习惯在 IDE 里面直接 run 或者 debug run 的方式,是使用命令行来启动。基于肌肉记忆,修改了子模块 logback-spring.xml 的日志配置,然后 mvn clean compile && mvn -pl xxx spring-boot:run 运行,但是没效果。 又试了 mvn clean package && java -jar xxx.jar 能正常。

那么 mvn -pl xxx spring-boot:runjava -jar xxx.jar 运行方式有什么不同吗?

jar 包方式的运行,是把所有的资源都打进去了, 所以是脱离 maven,而 mvn 命令行这种是依赖 spring boot 的插件 spring-boot-maven-plugin 来构建。 既然有构建了,但为什么启动后对修改不生效? 这是因为 mvn spring-boot:run 启动的时候,依赖包没有重新 install 导致,如上我们只是 compile。所以需要改成 mv install && mvn -pl xxx spring-boot:run

为什么使用 mvn 来启动? 这是因为可以快速指定一个模块启动,构建更快,但如果修改了子模块相关的,需要重新 install 下。