如何在引导程序文件中正确设置不同的Spring配置文件(Spring Boot以不同的Cloud Config服务器为目标)?

时间:2016-12-05 19:30:25

标签: java spring-boot spring-cloud-config spring-profiles

每个环境都有不同的配置服务器。每个Spring启动应用程序应针对其相应的配置服务器。我试图通过在bootstrap.properties文件中设置配置文件来实现这一点,例如:

spring.application.name=app-name
spring.cloud.config.uri=http://default-config-server.com

---
spring.profiles=dev
spring.cloud.config.uri=http://dev-config-server.com

---
spring.profiles=stage
spring.cloud.config.uri=http://stage-config-server.com

---
spring.profiles=prod
spring.cloud.config.uri=http://prod-config-server.com

然后我设置cla -Dspring.profiles.active=dev但是加载的配置服务器始终是文件中设置的最后一个(即prod配置服务器将在上面的设置中加载,然后如果prod被删除,阶段将加载)。

是否可以为云配置服务器设置引导配置文件?我跟着this example但似乎无法让它运转起来。对于它的价值,这些配置文件可以很好地加载正确的配置(即如果开发配置文件处于活动状态,则会加载app-name-dev.properties),但是没有从正确的配置服务器中提取

3 个答案:

答案 0 :(得分:13)

在单个文件中指定不同的配置文件仅支持YAML文件,并且不适用于属性文件。对于属性文件,请指定特定于环境bootstrap.properties以覆盖默认bootstrap.properties的属性。

因此,在您的情况下,您将获得4个文件bootstrap-prod.propertiesbootstrap-stage.propertiesbootstrap-dev.propertiesbootstrap.properties

然而,除此之外,您还可以仅提供默认-Dspring.cloud.config.uri=<desired-uri>,并在启动应用程序时通过将java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url> 传递给您的应用程序来覆盖该属性。

void CreateAccountGUI()
    {
        GUI.Box(new Rect(320, 120, 400, 380), "Create Account");

        GUI.Label(new Rect(390, 200, 220, 23), "Email");
        CEmail = GUI.TextField(new Rect(390, 225, 220, 23), CEmail);

        GUI.Label(new Rect(390, 255, 220, 23), "Password");
        CPassword = GUI.TextField(new Rect(390, 280, 220, 23), CPassword);

        GUI.Label(new Rect(390, 310, 220, 23), "Confirm Email");
        ConfirmEmail = GUI.TextField(new Rect(390, 340, 220, 23), ConfirmEmail);

        GUI.Label(new Rect(390, 370, 220, 23), "Confirm Password");
        ConfirmPass = GUI.TextField(new Rect(390, 400, 220, 23), ConfirmPass);

        if (GUI.Button(new Rect(370, 460, 120, 25), "Create Account"))
        {
            if (ConfirmPass == CPassword && ConfirmEmail == CEmail)
            {
                StartCoroutine("CreateAccount");
            }
            else
            {
                //StartCoroutine();
            }
        }
        if (GUI.Button(new Rect(520, 460, 120, 25), "Back"))
        {
            currentMenu = "Login";
        }
    }

这将优先于默认配置值。

答案 1 :(得分:3)

 $notifications = auth()->user()->notifications()->orderBy('created_at','desc')->get()->toArray();

bootstrap.yml

I solved a similar problem with an environment variable in Docker. 

Dockerfile

spring:
  application:
    name: dummy_service
  cloud:
    config:
      uri: ${CONFIG_SERVER_URL:http://localhost:8888/}
      enabled: true
  profiles:
    active: ${SPR_PROFILE:dev}

多克尔-compose.yml

ENV CONFIG_SERVER_URL=""
ENV SPR_PROFILE=""

答案 2 :(得分:0)

@LarryW(我无法回答相同的评论):

我猜想显式添加该属性的好处是,在不设置环境变量的情况下,它允许您添加默认值(在本例中为“ dev”)。