无法根据活动的 Spring 配置文件生成不同的 spring-云网关路由

Unable to generate different spring-cloud-gateway routes based on active Spring profile

我正在尝试使用 Spring 配置文件在 Spring 云网关中定义不同的路由。我读过的所有关于 Spring 如何使用 yaml sems 管理配置文件以指示它 应该 工作的所有内容,但对于我的生活来说,它只是......似乎没有。 (我的其他 Spring 应用程序使用属性,所以我不习惯 yaml 配置——我可能遗漏了一些东西。)

实际上,我想做的是拥有一个 "prod" 配置文件,其中包含我的生产服务器的 URI,以及一个 "dev" 配置文件,其中包含本地主机等效项。

我有两个配置文件,dev 和 prod。我的 application.yml 文件看起来像这样

spring:
  profiles:
    default: prod
management:
  endpoint:
    health:
      enabled: true
  endpoints:
    web:
      exposure:
        include: hystrix.stream, gateway
---
spring
  profiles: prod
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: http://foo.mycompany.com
          predicates:
           - Path=/status
           - Method=GET
---
spring
  profiles: dev
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: http://localhost:8080
          predicates:
           - Path=/status
           - Method=GET

我的理解如下:

鉴于这种理解,我希望 Spring 首先解析 "default" 属性,了解默认激活的配置文件应该是 prod。然后它将解析产品属性。由于 "prod" 是一个活动的配置文件(唯一的活动配置文件,是默认的),它应该解析并应用 prod 路由。然后它会解析 dev 路由,但会识别出 dev 不是活动配置文件,并且不会覆盖这些值。这是我阅读 documentation on how to change config based on the environment.

的理解

但是,当我加载它时,我点击了执行器端点 -- /actuator/gateway/routes -- 我返回 [] 我希望看到产品路线的地方。我确实在我的日志中看到产品配置文件已激活,但似乎在顶部的 "default" 部分中没有属性导致当解析器从配置文件部分读取它们时它们不被应用。

我尝试的另一件事是将 "dev" 属性设为默认值,然后尝试使用 "prod" 配置文件属性覆盖 URI。那里发生了一个类似的问题——我点击了执行器端点并返回了路由,但它们只是默认的开发路由。

如何利用 Spring 配置文件在我的 application.yml 中配置不同的 Spring Cloud Config 路由?

版本:

(出于政治原因,我无法使用Spring Cloud Config。我公司的首席架构师患有严重的非发明人综合症。)

您不能在 属性 文件中使用 spring.profiles.default。设置这样的值为时已晚。 所以你可以使用程序参数(或系统属性)来设置它。例如。

java -jar --spring.profiles.default=dev your-app.jar

或者您可以通过硬编码默认配置文件在代码中完成此操作:

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication application = new SpringApplication(DemoApplication.class);
    ConfigurableEnvironment environment = new StandardEnvironment();
    environment.setDefaultProfiles("dev");
    application.setEnvironment(environment);
    application.run(args);
  }
}

阅读所有评论,您可以在这里找到一些相关信息: https://github.com/spring-projects/spring-boot/issues/1219