You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Config无法解析GitHub配置文件的message占位符

Spring Cloud Config无法注入配置值排查与解决

问题描述

尝试将GitHub仓库中app-1.properties的message值通过@Value("${message}")注入时失败,报错:

Could not resolve placeholder 'message' in value "${message}"

此前功能正常,未修改代码突然失效。

相关配置与日志

客户端配置

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2022.0.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.project-lombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

application.properties

spring.application.name=micro
spring.cloud.config.uri=http://localhost:8888
management.endpoints.web.exposure.include=*
server.port=8082
spring.config.import=optional:configserver:http://localhost:8888

主类

@SpringBootApplication
public class MicroApplication {
    public static void main(String[] args) {
        SpringApplication.run(MicroApplication.class, args);
    }
}

控制器类

@RefreshScope
@RestController
public class WebController {
    @Value("${message}")
    private String message;
    @RequestMapping("/message")
    String getMessage() {
        return message;
    }
}

客户端日志

o.s.c.c.c.ConfigServerConfigDataLoader   : Fetching config from server at : http://localhost:8888
2023-03-09T11:12:13.589+01:00  WARN 5992 --- [           main] o.s.c.c.c.ConfigServerConfigDataLoader   : Could not locate PropertySource ([ConfigServerConfigDataResource@7e38a7fe uris = array<String>['http://localhost:8888'], optional = true, profiles = list['dev']]): None of labels [] found
2023-03-09T11:12:15.246+01:00 ERROR 5992 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.webController': Injection of autowired dependencies failed
    ...
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'message' in value "${message}"
    ...

服务端配置

application.yml

spring:
  cloud:
    config:
      server:
        git:
          https://github.com/Krzysiek-lab/demo
server:
  port: 8888

主类

@SpringBootApplication
@EnableAspectJAutoProxy
@EnableDiscoveryClient
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

application.properties

spring.jpa.datebase=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/moja
spring.datasource.username=postgres
spring.datasource.password=Krzysiek123qweasd.
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
spring.application.name=aplikacja

服务端日志

2023-03-09T10:55:11.279+01:00  INFO 3628 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 4.582 seconds (process running for 4.935)

GitHub仓库配置文件(app-1.properties)

message = my configuration from spring cloud server

排查与解决方案

1. 修复服务端Git配置错误

服务端application.yml中Git仓库地址缺少uri键,导致配置中心无法识别仓库地址。修改为:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/Krzysiek-lab/demo
server:
  port: 8888

2. 修正配置文件命名匹配规则

Spring Cloud Config默认按{application}-{profile}.properties规则匹配配置文件。当前客户端spring.application.name=micro,而仓库中是app-1.properties,不匹配。可选择以下方案之一:

  • 修改客户端application.properties中的spring.application.name=app-1
  • 在GitHub仓库中添加micro.properties文件,将message配置移入该文件
  • 在服务端配置search-paths指定扫描路径,或配置default-label等参数匹配文件

3. 移除optional配置,明确依赖配置中心

客户端spring.config.import=optional:configserver:...中的optional会让客户端在无法连接配置中心时仍启动,导致配置缺失无明确提示。修改为:

spring.config.import=configserver:http://localhost:8888

这样启动时若配置中心连接失败会直接报错,便于排查。

4. 清理服务端多余配置

服务端当前包含数据库、Eureka等无关配置,若仅作为Config Server使用,建议移除这些配置及对应依赖,避免干扰配置中心功能。

内容的提问来源于stack exchange,提问作者Ign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:19:52