Spring Cloud配置服务 - 客户端无法正常工作

时间:2017-08-18 18:30:48

标签: spring-cloud spring-cloud-config

运行config-client时遇到错误..简单的事情直接来自弹簧指南不起作用。

2017-08-18 13:44:31.194 ERROR 12548 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.restController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'message' in value "${message}"
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.sprin

RestController

@RefreshScope
@org.springframework.web.bind.annotation.RestController
public class RestController {
    @Value("${message}")
    private String message;

    @RequestMapping("/message")
    String getMessage() {
        return this.message;
    }
}

bootstrap.yml of config-client 
spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:8888
management:
  security:
    enabled: false


application.yml of config-server
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/config-properties
server:
  port: 8888

来自config-client服务的日志

启动ApplicationContext时出错。要显示自动配置报告,请使用' debug'重新运行您的应用程序。启用。 2017-08-18 23:13:45.080 ERROR 13812 --- [main] o.s.boot.SpringApplication:应用程序启动失败

org.springframework.beans.factory.BeanCreationException:使用名称' scopedTarget.restController创建bean时出错&#39 ;:注入自动连接的依赖项失败;嵌套异常是java.lang.IllegalArgumentException:无法解析占位符' message'价值" $ {message}"     在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractBeanFactory $ 2.getObject(AbstractBeanFactory.java:345)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.cloud.context.scope.GenericScope $ BeanLifecycleWrapper.getBean(GenericScope.java:359)〜[spring-cloud-context-1.2.3.RELEASE.jar:1.2.3.RELEASE]     在org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:176)〜[spring-cloud-context-1.2.3.RELEASE.jar:1.2.3.RELEASE]     在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:340)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.cloud.context.scope.refresh.RefreshScope.start(RefreshScope.java:121)〜[spring-cloud-context-1.2.3.RELEASE.jar:1.2.3.RELEASE]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.8.0_144]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_144]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_144]     在java.lang.reflect.Method.invoke(Method.java:498)〜[na:1.8.0_144]     在org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:177)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:140)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)〜[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)〜[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.boot.SpringApplication.run(SpringApplication.java:303)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]     在com.demo.ConfigClientApplication.main(ConfigClientApplication.java:9)[classes /:na] 引起:java.lang.IllegalArgumentException:无法解析占位符'消息'价值" $ {message}"     在org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)〜[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)〜[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)〜[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)〜[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.context.support.PropertySourcesPlaceholderConfigurer $ 2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)〜[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)〜[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]     ...省略了31个常见帧

与目标虚拟机断开连接,地址:' 127.0.0.1:59908',传输:' socket'

2 个答案:

答案 0 :(得分:0)

确保GIT URI有效,它应该是https://github.com/userName/repositoryName  然后将您的配置文件夹推送到repositoryName。

示例:https://github.com/PraveenKumarMekala/Microservices-With-Spring-Example

这里我有一个名为ConfigData的文件夹,我放置了所有的yml文件。你应该有一个带有config-client.yml文件的文件夹(yml文件名应该与你的应用程序名相同,因为你没有提到任何配置文件)在您的客户端yml文件中,它将使用您的应用程序名称回退到您的默认配置文件)

您的yml文件应如下所示

<强>配置-client.yml this.test = "<p>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggg</p>"

config-client.yml文件应该放在你的git repo中。

config-client的bootstrap.yml

--- message : Hello World!

注意:如果你提到profileName,那么yml文件名应为 config-client-profileName.yml

config.server的application.yml

--- spring: profiles: active: profileName application: name: config-client cloud: config: uri: http://localhost:8887 server: port: 8888

进行此更改并尝试,希望它有用。

PS:如果您没有git帐户,请创建一个帐户,然后创建存储库

  

https://help.github.com/articles/create-a-repo/

答案 1 :(得分:0)

也许由

config-client的bootstrap.yml


spring:
  profiles:
    active: profileName
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:8888
server:
  port: 8887