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

ConfigServerInstanceProvider报错:需DiscoveryClient或Function的解决方法

解决Spring Boot启动错误:ConfigServerInstanceProvider requires a DiscoveryClient or Function

问题描述

Gradle构建配置

plugins {
    id 'org.springframework.boot' version '2.6.15'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'java'
}

group = 'com.test.config'
version = '0.0.1'

java {
    sourceCompatibility = '21'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
ext {
    set('springCloudVersion', "2021.0.9")
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.10.RELEASE'
    implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
    implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
    implementation 'org.apache.commons:commons-collections4:4.4'
    implementation 'commons-io:commons-io:2.14.0'
    implementation 'org.springframework.data:spring-data-commons:2.7.14'
    implementation 'org.springframework.security:spring-security-config'
    implementation 'org.springframework.security:spring-security-web'
    implementation 'javax.persistence:javax.persistence-api:2.2'
    compileOnly 'javax.servlet:servlet-api:2.5'
    implementation 'org.postgresql:postgresql'
    implementation 'com.google.code.findbugs:jsr305:3.0.2'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.10.RELEASE'
    implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final'
    implementation 'joda-time:joda-time:2.12.5'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

    // Swagger
    implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'

    // Lombok
    compileOnly 'org.projectlombok:lombok:1.18.30'
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
    testCompileOnly 'org.projectlombok:lombok:1.18.30'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'

    testImplementation 'org.junit.jupiter:junit-jupiter-api'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

启动错误日志

2024-02-12 22:44:31.979 ERROR 8752 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configServerInstanceProvider' defined in class path resource [org/springframework/cloud/config/client/DiscoveryClientConfigServiceBootstrapConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.config.client.ConfigServerInstanceProvider]: Factory method 'configServerInstanceProvider' threw exception; nested exception is java.lang.IllegalStateException: ConfigServerInstanceProvider requires a DiscoveryClient or Function
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:423) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:164) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:195) ~[spring-cloud-context-3.1.7.jar:3.1.7]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:114) ~[spring-cloud-context-3.1.7.jar:3.1.7]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:77) ~[spring-cloud-context-3.1.7.jar:3.1.7]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-5.3.27.jar:5.3.27]
    at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66) ~[spring-boot-2.6.15.jar:2.6.15]
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) ~[na:na]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:343) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:301) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) ~[spring-boot-2.6.15.jar:2.6.15]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.6.15.jar:2.6.15]
    at com.atlas.merchant.onboarding.config.Application.main(Application.java:47) ~[main/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.config.client.ConfigServerInstanceProvider]: Factory method 'configServerInstanceProvider' threw exception; nested exception is java.lang.IllegalStateException: ConfigServerInstanceProvider requires a DiscoveryClient or Function
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.27.jar:5.3.27]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.27.jar:5.3.27]
    ... 34 common frames omitted
Caused by: java.lang.IllegalStateException: ConfigServerInstanceProvider requires a DiscoveryClient or Function
    at org.springframework.cloud.config.client.DiscoveryClientConfigServiceBootstrapConfiguration.configServerInstanceProvider(DiscoveryClientConfigServiceBootstrapConfiguration.java:52) ~[spring-cloud-config-client-3.1.8.jar:3.1.8]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.27.jar:5.3.27]
    ... 35 common frames omitted

YML配置

spring:
  application:
    name: test-app
  cloud:
    config:
      enabled: true
      discovery:
        enabled: true
        serviceId: test-app-config
      failFast: true
  jackson:
    time-zone: UTC

错误原因

配置中开启了Config Server的服务发现模式(spring.cloud.config.discovery.enabled=true),但项目依赖里未添加任何服务发现客户端的starter,导致Spring无法找到DiscoveryClient实例来定位Config Server地址,因此抛出该错误。

解决方案

根据实际需求选择以下方案之一:

方案1:保留服务发现模式,添加服务发现客户端依赖

若架构中使用服务发现组件(如Eureka、Nacos等)管理Config Server地址,需添加对应客户端依赖:

  • 若使用Spring Cloud Netflix Eureka,在Gradle的dependencies块中添加:
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

同时在YML中配置Eureka服务地址:

eureka:
  client:
    service-url:
      defaultZone: http://你的Eureka服务地址:端口/eureka/
  • 若使用Nacos作为服务发现,替换为Nacos的starter依赖:
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'

并在YML中配置Nacos地址:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 你的Nacos服务地址:端口

方案2:关闭服务发现模式,直接指定Config Server地址

若不需要通过服务发现获取Config Server,直接关闭发现模式并指定Config Server具体地址:
修改YML配置:

spring:
  cloud:
    config:
      enabled: true
      discovery:
        enabled: false
      uri: http://你的Config Server地址:端口/ # 替换为实际地址
      failFast: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:15:55