Spring boot 同一应用程序中的两个环境

Spring boot 同一应用程序中的两个环境,spring-boot,Spring Boot,是否可以为不同的配置文件(使用相关的属性源)构建环境 例如:当应用程序使用prod profile运行时,我想为dev profile配置bean 我使用的是SpringBoot2(带有新的活页夹API) 感谢您的帮助 注意:我使用相同的配置对象,但具有特定于配置文件的值 例如: application.yml spring: profiles: dev server: address: 127.0.0.1 --- spring: profiles: prod server:

是否可以为不同的配置文件(使用相关的属性源)构建环境

例如:当应用程序使用prod profile运行时,我想为dev profile配置bean

我使用的是SpringBoot2(带有新的活页夹API)

感谢您的帮助

注意:我使用相同的配置对象,但具有特定于配置文件的值

例如: application.yml

spring:
   profiles: dev
server:
   address: 127.0.0.1
---
spring:
   profiles: prod
server:
   address: 192.168.1.120
配置bean:

@组件
@配置属性(“服务器”)
@验证
公共静态类ServerConf{
私人最终地址;
...
}
主要目标是将ServerConf作为与活动概要文件相关的bean,并将ServerConf类的一组对象与特定概要文件或一组bean(如ServerConfProd、ServerConfDev)相关

理想情况下,我正在寻找类似的产品:

StandardEnvironment env=新的StandardEnvironment();
环境设置动态配置文件(“产品”);
可变属性资源propertySources=env.getPropertySources();
addLast(新的ResourcePropertySource(“类路径:application-prod.properties”);
addLast(新的ResourcePropertySource(“classpath:application.properties”);
ServerConf prodServerConf=Binder.get(env.bind(“server”,Bindable.of(ServerConf.class)).get();

它可以工作,但有很多缺点:验证无法工作,属性源手动设置…

是的,您可以按如下方式设置多个活动配置文件:

spring.prifiles.active:
- prod
- dev
通过这种方法,将初始化使用
@Profiles(“prod”)
@Profiles(“dev”)
定义的所有bean。请注意,不应该有任何含混不清的bean定义


如果您只想将
prod
设置为活动配置文件,您仍然可以告诉Spring包含其他配置文件:

spring.profiles.include:
  - dev
  - other
有关更多参考,请参阅

更新 你的想法行不通:一个属性将覆盖另一个属性

我将把
serverConf.address
处理为一个映射:

application.yml

spring:
  profiles: dev
server:
  addresses:
    dev: 127.0.0.1
---
spring:
  profiles: prod
server:
  addresses:
    prod: 192.168.1.120
ServerConf.java

@组件
@配置属性(“服务器”)
@验证
公共类ServerConf{
私有最终映射地址=新HashMap();
//...
}

这样,如果您同时激活两个配置文件,您将获得一个带有两个键的映射(
dev
prod
)。我个人觉得它有点难看,但应该可以解决您的问题。

是的,您可以按如下方式设置多个活动配置文件:

spring.prifiles.active:
- prod
- dev
通过这种方法,将初始化使用
@Profiles(“prod”)
@Profiles(“dev”)
定义的所有bean。请注意,不应该有任何含混不清的bean定义


如果您只想将
prod
设置为活动配置文件,您仍然可以告诉Spring包含其他配置文件:

spring.profiles.include:
  - dev
  - other
有关更多参考,请参阅

更新 你的想法行不通:一个属性将覆盖另一个属性

我将把
serverConf.address
处理为一个映射:

application.yml

spring:
  profiles: dev
server:
  addresses:
    dev: 127.0.0.1
---
spring:
  profiles: prod
server:
  addresses:
    prod: 192.168.1.120
ServerConf.java

@组件
@配置属性(“服务器”)
@验证
公共类ServerConf{
私有最终映射地址=新HashMap();
//...
}

这样,如果您同时激活两个配置文件,您将获得一个带有两个键的映射(
dev
prod
)。我个人觉得这有点难看,但应该可以解决您的问题。

谢谢,但在我的情况下不起作用。我想为相同的属性配置特定的值。你可以编辑你的问题并提供一些例子吗?我已经写了一个例子。希望这将有助于澄清我想要什么@谢谢你的时间,但这不是我想要的。你可能想更详细地解释你的用例。我看不出答案不起作用的原因,谢谢,但在我的情况下它不起作用。我想为相同的属性配置特定的值。你可以编辑你的问题并提供一些例子吗?我已经写了一个例子。希望这将有助于澄清我想要什么@谢谢您抽出时间,但这不是我想要的。您可能想更详细地解释您的用例。我看不出答案不起作用的原因,您可以在两个不同的端口上配置具有相同值的spring boot。如果我知道您正在查看
@Profile(“dev”)
注释,谢谢,但不,情况稍微复杂一点您可以在两个不同的端口上使用相同的值配置spring boot如果我理解您正在查看
@Profile(“dev”)
注释谢谢,但不,情况稍微复杂一点