Spring boot 同一应用程序中的两个环境
是否可以为不同的配置文件(使用相关的属性源)构建环境 例如:当应用程序使用prod profile运行时,我想为dev profile配置bean 我使用的是SpringBoot2(带有新的活页夹API) 感谢您的帮助 注意:我使用相同的配置对象,但具有特定于配置文件的值 例如: application.ymlSpring 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:
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”)
注释谢谢,但不,情况稍微复杂一点