当前位置: 首页>后端>正文

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题

前言

这是 2024年04月18日, 一位朋友碰到的问题 

甚至于情况是 怎么修改项目中的各个配置文件都不生效, 修改 A 项目, 依赖A的B项目 等等 都不行 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_架构,第1张

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_java_02,第2张

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_架构_03,第3张

问题的调试

这里主要是调试 看一下 spring-boot 的内嵌的 tomcat 这边暴露服务的端口的相关获取 

这里 大致提到一些 关键的地方, 大家可以根据 这些地方 来进行排查 

如下 这里是 tomcat 这边 connector 初始化端口的地方, 端口来自于 TomcatServletWebServerFactory 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_微服务_04,第4张

TomcatServletWebServerFactory 的端口配置 来自于 ServletWebServerFactoryCustomizer

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_ide_05,第5张

ServletWebServerFactoryCustomizer 的端口配置来自于 serverProperties 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_架构_06,第6张

serverProperties 的配置来自于 applicationContext 的整个大局的环境变量 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_架构_07,第7张

关于 spring-boot 各个配置的来源 可以参见这里 

然后 对方同学这里出现的问题现场是 

启动的是 appointment 服务, 然后 appointment 的 target/classes 下面没有 application.properties [按正常情况 idea 应该会讲项目的 resources 下面的文件拷贝过去]  

然后 equipment 项目的 target/classes 下面有 equipment 的 application.properties 然后 按照 classpath 的优先级, 从 appointment 下面没有找到, 就获取的 equipment 下面的 application.properties 

因为 spring-boot 这边读取 application.properties 是获取的 classpath 下面的 application.properties 对应的是 target/classes 下面的 application.properties 因此上面之前修改 equipment 项目中的 application.properties 无效 

然后修改 appointment 的 application.properties 之后 idea 这边没有将 application.properties 拷贝到 appointment 的 target/classes 

所以 项目启动一直使用的额是 equipment 下面的 target/classes 下面的 application.properties

最终手动拷贝一下 appointment 服务的 application.properties, 就解决问题了, 这种情况 一般是 idea 抽风 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_spring_08,第8张

问题解决 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_架构_09,第9张

idea 的正常拷贝行为

正常情况下应该是比如 我项目的 application.yml 发生了改动 

然后 我重启项目, idea 会自动将 application.yml 拷贝到 target/classes 下面 

15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题,15 spring-boot多个微服务在同一工作区间的情况下造成更新当前项目的服务端口不生效的问题_spring_10,第10张

完 


https://www.xamrdz.com/backend/3n51925047.html

相关文章: