Ren*_*ith 5 java spring spring-boot netflix-eureka spring-cloud-netflix
我想使用一组由 Eureka 注册的服务提供的属性来引导我的 Web 应用程序。
我在本地设置了 Eureka、ConfigServer(REST 服务)和客户端应用程序。
配置服务器代码
@GetMapping("/data")
public Map<String, String> getAllProperties(){
Map<String, String> dataMap = new HashMap<>();
dataMap.put("A", "1");
dataMap.put("B", "2");
dataMap.put("C", "3");
dataMap.put("D", "4");
dataMap.put("E", "5");
dataMap.put("F", "6");
dataMap.put("G", "7");
return dataMap;
}
Run Code Online (Sandbox Code Playgroud)
客户端/应用程序端
由于我需要对响应进行自定义处理,因此我创建了一个CustomConfigLocator
类来实现org.springframework.cloud.bootstrap.config.PropertySourceLocator
和覆盖locate()
查询和设置自定义属性的方法。
为了查询数据(属性),我需要一个实例DiscoveryClient
来发现Config Server
和查询/data
端点。
CustomConfigLocator
在使用spring.factories
文件引导应用程序时初始化。
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.config.client.ConfigClientApplication.CustomConfigLocator
Run Code Online (Sandbox Code Playgroud)
主类使用@EnableDiscoveryClient 进行注释,bootstrap.properties 提供以下属性。
spring.cloud.config.discovery.enabled = true
spring.cloud.config.discovery.service-id = CUSTOMCONFIGSERVER
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)
现在来到真正的问题。正如我之前提到的,需要一个 的实例DiscoveryClient
才能从 Eureka 发现 Config Server 实例。但是,当我尝试注入 (@Autowire) 的实例时org.springframework.cloud.client.discovery.DiscoveryClient
,应用程序无法开始抱怨该类型的实例在容器中不可用。
public class CustomConfigLocator implements PropertySourceLocator{
@Autowired
private DiscoveryClient discoveryClient;
Run Code Online (Sandbox Code Playgroud)
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“com.config.client.ConfigClientApplication.CustomConfigLocator”的bean时出错:通过字段“discoveryClient”表达的不满意依赖;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“org.springframework.cloud.client.discovery.DiscoveryClient”类型的合格 bean:预计至少有 1 个 bean 有资格作为自动装配候选。依赖注解:
任何人都可以建议一种从课程中访问DiscoveryClient的方法CustomConfigLocator
吗?
############## UPDATE-1 ###############
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
315 次 |
最近记录: |