Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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_Spring Boot - Fatal编程技术网

Java 如何在运行时切换Spring配置文件?

Java 如何在运行时切换Spring配置文件?,java,spring,spring-boot,Java,Spring,Spring Boot,目前,我通过@Value将其注入到我的应用程序属性中,效果很好。现在我希望我的应用程序支持多个配置,这意味着它的@Value每次都应该返回不同的值 我读过关于spring概要文件的文章,但我不明白如何在运行时切换概要文件。有可能吗 我真正需要的是在服务器启动时加载所有配置,并在请求到达时动态选择其配置文件-每个请求应该有一组配置 在运行时切换Spring配置文件不是一个好的做法。Spring profile旨在作为跨不同环境管理应用程序的一种方式 Spring概要文件提供了一种隔离应用程序配置部

目前,我通过@Value将其注入到我的应用程序属性中,效果很好。现在我希望我的应用程序支持多个配置,这意味着它的@Value每次都应该返回不同的值

我读过关于spring概要文件的文章,但我不明白如何在运行时切换概要文件。有可能吗


我真正需要的是在服务器启动时加载所有配置,并在请求到达时动态选择其配置文件-每个请求应该有一组配置

在运行时切换Spring配置文件不是一个好的做法。Spring profile旨在作为跨不同环境管理应用程序的一种方式

Spring概要文件提供了一种隔离应用程序配置部分的方法,并使其仅在某些环境中可用

如果你有一个变量需要动态地改变每一个传入的请求,请考虑以下几个选项:

  • 将值存储在DB中,启动时缓存,并根据传入的请求参数/正文获取
  • 从传入请求参数/正文推断值
  • 将所有可能的值存储在属性文件中,在开始时加载,并根据传入的请求参数/正文进行选择
  • 将所有可能的值存储为enum/constants,并在传入请求参数/body上选择bsaed

实际上,您可以在启动spring up期间切换通过JVM参数的配置文件。如果是spring boot,您知道可以创建基于配置文件的属性,如
application.properties
application-{profile}.properties
。例如:
application-dev.properties
并且您需要通过
spring.profiles.active=dev
在dev上启动服务时,它将自动加载
application.properties
并覆盖
application-dev.properties
文件中存在的参数如果这不是您想要的,请提供更多信息?我认为OP想要的是在应用程序启动后切换配置文件,因为OP想要在请求到达时动态切换配置文件(这只能在应用程序启动后发生)。因此,您的建议不会起作用。概要文件不应该这样使用,它通常在项目开始根据当前选择的概要文件选择一个Bean而不是另一个Bean时使用。或从特定应用程序加载参数-xxxx.properties。但是热配置文件切换不是可以完成的。如果我想使用与-Dspring.profiles.active不同的名称通过命令行参数传递配置文件,该怎么办?