Spring Cloud Config身份验证问题

时间:2020-03-09 10:32:24

标签: spring-boot spring-cloud

我正在尝试为我的一个项目配置Spring Cloud Config。它以前曾经工作得很好。但是,在最新版本的Spring中,尝试启用身份验证时会遇到麻烦。这是我看到的日志。

INFO  Fetching config from server at : http://localhost:8888
WARN  Could not locate PropertySource: Could not extract response: no suitable HttpMessageConverter found for response type [class org.springframework.cloud.config.environment.Environment] and content type [text/html;charset=UTF-8]
INFO  The following profiles are active: development

有人遇到这个问题吗?没有身份验证,spring-cloud-config-client可以很好地工作,但是启用基本身份验证后,相同的代码将无法正常工作。

Spring Cloud Config Server application.properties:

spring.application.name=my-config
server.port=8888
spring.cloud.config.server.git.uri=file:///repo/my-config
spring.security.user.name=root
spring.security.user.password=root

Spring Cloud Config Client Bootstrap.yml:

spring.application.name=my-service
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
management.endpoints.web.exposure.include=*
spring.cloud.config.username=root
spring.cloud.config.password=root

我的配置服务器和服务项目都对Spring Boot和Spring Cloud使用相同的version属性

<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
<spring-cloud-config.version>2.2.0.RELEASE</spring-cloud-config.version>

======其他信息======

我的服务项目以某种方式没有检测到我在bootstrap.properties中指定的spring.profiles.active = development配置。我尝试通过在代码中输出此配置来确认这一点。

@Value("${spring.profiles.active}")
private String activeProfile;

logger.info("Active Profile: " + activeProfile);

奇怪的是,记录器的输出为空白,这意味着没有活动的配置文件。因此很明显,此bootstrap.properties配置被忽略。为了绕过这个问题,我在我的服务启动中添加了这个JVM参数。

-Dspring.profiles.active=development -Dspring.application.name=my-service

这有效地解决了未检测到配置文件的问题。但是我仍然不清楚为什么bootstrap.properties中会忽略spring.profiles.active = development配置。

1 个答案:

答案 0 :(得分:0)

您需要在“配置服务器”应用程序中提供native配置文件,而将development配置文件留给客户端。以下配置有效:

配置服务器

  1. bootstrap.yml

    server:
      port: 9001
      servlet.context-path: /my-config-server
    
    spring:
      application.name: my-config-server
      profiles:
        active: native
      main:
        banner-mode: "OFF"
      cloud:
        config:
          uri: http://localhost:9001/my-config-server
          fail-fast: true
          username: root
          password: root
    
  2. application.yml:

    spring:
      profiles: native
      cloud:
        config:
          server:
            native:
              searchLocations: file:<path-to-files>
              git:
                clone-on-start: false # Only clone(true) on-demand
    

配置客户端

  1. bootstrap.yml

    spring:
      application.name: user-api
      profiles:
        active: development
      main:
        #banner-mode: "OFF"
      cloud:
        config:
          uri: http://localhost:9001/my-config-server
          fail-fast: true 
          username: root
          password: root