配置统一 Java Spring



我的应用程序大纲正在增长。我正在寻找一些解决方案来存储每个电路的配置。 我认为这样的配置格式会很好:

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