我的应用程序大纲正在增长。我正在寻找一些解决方案来存储每个电路的配置。 我认为这样的配置格式会很好:
someHost:
test: testUrl
local: localUrl
dev: devUrl
qa: qaUrl
stage: stageUrl
prod: prodUrl
到目前为止,我不了解如何正确配置我的应用程序,以便它根据配置文件在必要的配置下正常工作。你有什么解决方案吗?
堆栈:Java,Spring Boot 2,Kubernetes
为了保持您建议的格式,您需要创建另一个变量,您将在其中配置前缀。
hostPrefix: dev
someHost:
test: testUrl
local: localUrl
dev: devUrl
qa: qaUrl
stage: stageUrl
prod: prodUrl
然后在带有内部占位符的必填字段中注入@Value:
@Value("${someHost.${hostPrefix}}")
private String url;
就是这样。在当前解决方案中,它将解析为${someHost.dev}
,这将解析为devUrl
。您还可以为此使用弹簧轮廓:
@Value("${someHost.${spring.profiles}}")
private String url;
你可以使用Spring的配置文件。 为每个环境定义一个配置文件,然后它可以有自己的一组属性和 bean
似乎您已经有了 yml 格式的配置。然后,您可以使用这样的弹簧轮廓:
spring:
profiles:
active: dev
someHost:
url: devUrl
---
spring:
profiles: test
someHost:
url: testUrl
---
spring:
profiles: qa
someHost:
url: qaUrl
然后你创建@Configuration
:
@Configuration
@ConfigurationProperties("someHost")
public class SomeHostConfig {
private String url;
}
或者,您可以使用任何托管 Bean 字段并注入@Value:
@Value("${someHost.url}")
private String someHostUrl;
然后,使用配置文件运行应用程序。例如,在 maven 中,它将是:
mvn spring-boot:run -Dspring.profiles.active=dev