Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring的配置统一_Java_Spring_Configuration - Fatal编程技术网

Java Spring的配置统一

Java Spring的配置统一,java,spring,configuration,Java,Spring,Configuration,我的应用程序大纲正在增长。我正在寻找一些解决方案来存储每个电路的配置。 我认为这样的配置格式很好: someHost: test: testUrl local: localUrl dev: devUrl qa: qaUrl stage: stageUrl prod: prodUrl 到目前为止,我还不了解如何正确配置我的应用程序,使其能够根据配置文件正确地进行必要的配置。你有什么解决办法吗 堆栈:Java、Spring Boot 2、Kubernetes,您可以使用它们

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

someHost:
  test: testUrl
  local: localUrl
  dev: devUrl
  qa: qaUrl
  stage: stageUrl
  prod: prodUrl
到目前为止,我还不了解如何正确配置我的应用程序,使其能够根据配置文件正确地进行必要的配置。你有什么解决办法吗

堆栈:Java、Spring Boot 2、Kubernetes,您可以使用它们。
为每个环境定义一个概要文件,然后它可以拥有自己的一组属性和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

要保留您建议的格式,您需要创建另一个变量,在其中配置前缀

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;

这将迫使我根据环境在每个bean的轮廓下进行操作。我只希望有1个bean,它可以理解它需要什么配置,这取决于配置文件。如果您不愿意,您不必更改任何bean。不要使用概要文件注释,bean将与所有相关。您可以简单地将属性文件按配置文件划分为一个文件。这是一个很好的解决方案,但我希望使配置文件尽可能清晰紧凑。因此,我正在为我提出的格式寻找解决方案。