微服务启动时bootstrap.yml未加载问题排查求助
微服务启动时bootstrap.yml被忽略问题排查
运行微服务时bootstrap.yml被忽略,启动日志中看不到程序尝试拉取配置中心的日志(缺失如下日志行):
service_1 | 2024-08-01T07:43:49.514Z INFO 1 --- [service_1] [main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
但执行mvn clean install进入测试阶段启动应用上下文时,能正常看到上述日志,推测是@SpringBootTest注解继承了@BootstrapWith,强制加载了bootstrap.yml。
项目依赖配置(pom.xml)
已包含Spring Cloud相关依赖,配置如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.7</version> <relativePath/> </parent> <groupId>my.whatever</groupId> <artifactId>whatever-service</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>${project.artifactId}</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>17</java.version> <spring-boot.version>3.2.7</spring-boot.version> <spring-cloud.version>2023.0.2</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>
bootstrap.yml配置
文件位于/src/main/resources目录下,内容如下:
spring: application: name: whatever-service cloud: config: uri: http://localhost:8888
补充排查:Docker镜像中缺失bootstrap.yml
深入排查发现bootstrap.yml未被打包到Docker镜像的jar包中:
- 执行以下命令验证,无结果返回:
docker run -it --entrypoint sh whatever-service:0.0.1-SNAPSHOT jar tf app.jar | grep bootstrap.yml
- 尝试在Dockerfile中添加
COPY src/main/resources/bootstrap.yml /app/bootstrap.yml,无效。
Docker构建相关配置
Docker Maven插件配置
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven-plugin.version}</version> <executions> <execution> <id>build-image</id> <phase>install</phase> <goals> <goal>build</goal> </goals> </execution> <execution> <id>push-image</id> <phase>deploy</phase> <goals> <goal>push</goal> </goals> </execution> </executions> <configuration> <pushRegistry>localhost:5000</pushRegistry> <images> <image> <name>${project.name}:${project.version}</name> <build> <dockerFile>${project.basedir}/Dockerfile</dockerFile> <args> <VERSION>${project.version}</VERSION> </args> </build> </image> </images> </configuration> </plugin>
Dockerfile内容
# Build phase. FROM maven:3.9.8-eclipse-temurin-17 as build WORKDIR /data COPY ./ /data RUN mvn clean install -Dmaven.test.skip=true # Deploy phase. FROM eclipse-temurin:17.0.5_8-jdk-alpine ARG VERSION COPY --from=build /data/target/whatever-service-$VERSION.jar /app/app.jar EXPOSE 8081 WORKDIR /app ENTRYPOINT ["java", "-jar", "app.jar"]
构建命令
mvn clean install -DskipTests
补充插件版本信息
项目中其他插件及版本配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>17</java.version> <spring-boot.version>3.2.7</spring-boot.version> <spring-cloud.version>2023.0.2</spring-cloud.version> <junit.bom.version>5.10.1</junit.bom.version> <openapi.version>2.5.0</openapi.version> <docker.maven-plugin.version>0.44.0</docker.maven-plugin.version> </properties> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>build-info</goal> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>default-deploy</id> <phase>none</phase> <!-- Disabilita il deploy standard --> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

