Spring boot 如何使用特定于环境的配置创建Spring云配置客户端?

Spring boot 如何使用特定于环境的配置创建Spring云配置客户端?,spring-boot,microservices,spring-cloud-config,Spring Boot,Microservices,Spring Cloud Config,我在Spring云配置服务器和Eureka服务器评测方面遇到了问题。 假设我有3个名称为(“spring.application.name”)的服务,如下所示: 我想将每个服务部署在两个区域(dev和prod)。在开发区域中,每个服务都将在本地主机上运行,而在prod中,它将具有一些不同的url。”dev区域中的myapp spring cloud config svc将指向本地git repo,而prod区域中的myapp spring cloud config svc将指向远程git rep

我在Spring云配置服务器和Eureka服务器评测方面遇到了问题。
假设我有3个名称为(“spring.application.name”)的服务,如下所示:

我想将每个服务部署在两个区域(dev和prod)。在开发区域中,每个服务都将在本地主机上运行,而在prod中,它将具有一些不同的url。”dev区域中的myapp spring cloud config svc将指向本地git repo,而prod区域中的myapp spring cloud config svc将指向远程git repo。我可以有2种配置:

1) 当我在本地启动“myapp svc”服务时,它应该连接到dev中的“myapp spring cloud config svc”。 我可以通过设置spring.cloud.config.uri=。 但是这个设置的问题是需要在bootstrap.properties中定义属性。 所以,如果将“myapp svc”部署到prod,我将不得不更改那里的配置uri,以将其指向prod config服务,而prod config服务又需要另一个构建创建。 这似乎不是一个好的解决方案,如果我有50个与应用程序相关的服务,那么在prod部署之前,我不能在每个服务中更改此属性。 我尝试在“myapp svc”的application-dev.properties中设置spring.cloud.config.uri,但不起作用。根据文档,它必须在引导中更改

  So, how do I implement this without having to create new build for prod ?
2) 我可以先调用eureka,然后使用eureka在这里调用配置服务。 这里的问题也一样。 如果我使用eureka查找配置,那么“bootstrap.yml”中必须定义“eureka.client.serviceUrl.defaultZone”。 见此: 因此,在这种情况下,我也需要在将此服务部署到prod之前更改eureka url。 请帮我这个。。。!! 以下是上述每个服务的属性yml的外观:

1) myapp-svc:
   1.1)bootstrap.yml  
        spring:
         application:
           name: myapp-svc 
         cloud:
           config:
             discovery:
               enabled: true
               serviceId: myapp-spring-cloud-config-svc
        eureka:
           client:
              serviceUrl:
                defaultZone: http://localhost:8762/eureka/
        server:
           port: 8082


    2) myapp-spring-cloud-config-svc:

      2.1)application-dev.properties:
           spring.cloud.config.server.git.uri=file:///C:/config-repo
           eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka

      2.2)application-prod.properties:
           spring.cloud.config.server.git.uri=https://github.com/<mygit Repo>

      2.3)bootstrap.proerties:
           spring.application.name=myapp-spring-cloud-config-svc
           server.port=8888


    3) myapp-spring-eureka-svc
       3.1)bootstrap.proerties
        spring.application.name=myapp-spring-eureka-svc
        server.port=8762
1)myapp svc:
1.1)bootstrap.yml
春天:
应用程序:
名称:myapp svc
云:
配置:
发现:
已启用:true
serviceId:myapp spring云配置svc
尤里卡:
客户:
服务URL:
默认区域:http://localhost:8762/eureka/
服务器:
端口:8082
2) myapp spring云配置svc:
2.1)应用程序开发属性:
spring.cloud.config.server.git.uri=file:///C:/config-回购
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka
2.2)应用产品属性:
spring.cloud.config.server.git.uri=https://github.com/
2.3)bootstrap.proerties:
spring.application.name=myapp spring cloud config svc
server.port=8888
3) myapp spring eureka svc
3.1)bootstrap.proerties
spring.application.name=myapp-spring-eureka-svc
server.port=8762
1)您可以为每个受支持的配置文件设置特定于配置文件的
引导-.properties
(如
应用程序-.properties
)以避免为每个环境重新构建应用程序。然后,只需在启动期间将应用程序配置文件using传递给您的应用程序。Spring将加载正确的
bootstrap-.properties
,并将连接到正确的配置服务器(或eureka等)。例如:

java -jar your-app.jar --spring.profiles.active=dev
spring.cloud.config.uri=${config.server.url}
java -jar your-app.jar --spring.cloud.config.uri= ...
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}
2) 您可以将URL作为自定义属性(与上面的配置文件相同)在外部传递,并在
bootstrap.properties
中使用类似的smth。例如:

java -jar your-app.jar --spring.profiles.active=dev
spring.cloud.config.uri=${config.server.url}
java -jar your-app.jar --spring.cloud.config.uri= ...
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}
然后在启动过程中传递
--config.server.url=…

3) 您可以在启动期间以相同的方式传递弹簧属性。例如:

java -jar your-app.jar --spring.profiles.active=dev
spring.cloud.config.uri=${config.server.url}
java -jar your-app.jar --spring.cloud.config.uri= ...
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}
4) 可以使用系统环境变量。例如:

java -jar your-app.jar --spring.profiles.active=dev
spring.cloud.config.uri=${config.server.url}
java -jar your-app.jar --spring.cloud.config.uri= ...
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}

谢谢你。它正在根据配置文件拾取文件。我以前试过这个,但之前它不起作用,现在我再次研究它,我知道了原因。这就引出了一个问题:如果我在本地repo中添加一个文件并提交它,然后启动一个服务,那么该服务将克隆远程repo,从而覆盖我在本地repo中的更改。我怎样才能阻止这种行为?每次,它都会从远程刷新并删除我的本地repo中添加的任何文件。spring.cloud.config.server.git.force pull=false也没有任何区别,尽管根据文档,这默认为false。我知道,ppl建议使用“本机”配置文件从本地repo读取。但是我已经为Dev profile配置了本地repo,所以有什么解决方法吗?@adwived我在从远程刷新时也遇到了同样的问题。因此,我看到了两种解决方法(可能并不完美,但…)1。使用本机并设置spring.cloud.config.server.native.search-locations=file:///C:/config-repo,并传递2个概要文件--spring.profiles.active=dev,native 2。使用远程回购,并有一些沙箱分支,您可以在其中快速提交,而无需任何代码审查,在这种情况下,您需要为配置客户端设置spring.cloud.config.label=your_分支,以便在运行期间获取最后一个配置developing@adwived如果我回答了您的主要问题,请根据StackOverflow建议接受,以帮助他人,谢谢: