我遇到了Spring Cloud Config Server和Eureka Server Profiling的问题。
假设我有3个服务,它们的名称(“ spring.application.name”)为:
myapp-svc
myapp-spring-cloud-config-svc
myapp-spring-eureka-svc
我想在2个区域(dev和prod)中部署每个服务。在开发区域中,每个服务都将在localhost上运行,并且在生产中它将具有一些不同的URL。开发人员区域中的“ myapp-spring-cloud-config-svc”将指向本地git repo,而生产区域中的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,我将不得不在此处更改config uri,以将其指向prod config服务,这又需要创建另一个构建。 这似乎不是一个很好的解决方案,如果我有50个与应用程序相关的服务,该产品在部署产品之前无法在每个服务中更改此属性。 我尝试在“ 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”。 看到以下内容:https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_client.html 因此,在这种情况下,我也需要在将此服务部署到产品之前更改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
答案 0 :(得分:1)
1)您可以为每个受支持的配置文件使用特定于配置文件的bootstrap-<profile>.properties
(如application-<profile>.properties
),以避免为每个环境重建应用程序。然后在启动过程中将应用程序配置文件使用传递给您的应用程序。 Spring将加载正确的bootstrap-<profile>.properties
并将连接到正确的配置服务器(或eureka等)。示例:
java -jar your-app.jar --spring.profiles.active=dev
2)您可以将URL作为自定义属性(与上面的配置文件相同)从外部传递,并在bootstrap.properties
中具有类似的含义。示例:
spring.cloud.config.uri=${config.server.url}
然后在启动过程中通过--config.server.url= ...
。
3)您可以在启动过程中以相同的方式传递Spring属性。示例:
java -jar your-app.jar --spring.cloud.config.uri= ...
4)您可以使用系统环境变量。示例:
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}