Java “单个弹簧”;豆子“;属性值在使用相应的“专用”设置时被覆盖;物业;文件(使用@PropertySource)
我正试图用它们的专用属性文件(“bean1.properties”中的“bean1”和“bean2.properties”中的“bean2”)初始化两个不同的SpringBean(bean1和bean2),其中bean1和2个属性文件具有相同的“entercode here”和不同的值。但是通过尝试这样做,bean1和bean2都只通过bean1.properties中的“值”进行初始化(而忽略bean2.properties) 演示代码已打开 基本上使用@PropertySource从类路径加载相应的属性文件Java “单个弹簧”;豆子“;属性值在使用相应的“专用”设置时被覆盖;物业;文件(使用@PropertySource),java,spring-boot,Java,Spring Boot,我正试图用它们的专用属性文件(“bean1.properties”中的“bean1”和“bean2.properties”中的“bean2”)初始化两个不同的SpringBean(bean1和bean2),其中bean1和2个属性文件具有相同的“entercode here”和不同的值。但是通过尝试这样做,bean1和bean2都只通过bean1.properties中的“值”进行初始化(而忽略bean2.properties) 演示代码已打开 基本上使用@PropertySource从类路径加
@Component
@PropertySource("classpath:bean1.properties")
@ConfigurationProperties
public class Bean1 {
private String symbol;
private String tenor;
// omitting code
}
@Component
@PropertySource("classpath:bean2.properties")
@ConfigurationProperties
public class Bean2 {
private String symbol;
private String tenor;
// omitting other code
}
bean1.properties:
symbol=bean1symbol
tenor=bean1tenor
bean2.properties
symbol=bean2symbol
tenor=bean2tenor
我期望bean1和bean2属性根据它们的属性文件的相应值初始化,[当它们具有相同的键时]
当我为Bean1和Bean2打印symbol和tenor时,symbol和tenor打印相同的值(来自Bean2.properties) 问题在于Spring
环境中的属性名冲突。您正在使用告知Spring从其他位置获取属性,但这些属性将进入相同的环境
相反,请尝试在*.properties文件中为属性添加前缀,并使用来消除同名属性的歧义
例如:
@组件
@PropertySource(“类路径:bean1.properties”)
@配置属性(前缀=“bean1”)
@配置
公共类Bean1{
私有字符串符号;
私人弦乐男高音;
//省略代码
}
@组成部分
@PropertySource(“类路径:bean2.properties”)
@配置属性(前缀=“bean2”)
@配置
公共类Bean2{
私有字符串符号;
私人弦乐男高音;
//省略其他代码
}
然后在*.properties文件中,您将拥有:
bean1.symbol=
bean1.tenor=
bean2.symbol=
bean2.tenor=
Spring将把所有属性文件读入同一名称空间——因此对于bean2.properties将在bean1.properties之后读取的情况,它将覆盖已经定义的属性
因此,您可以修改您的属性,将其命名为:
bean1.symbol=bean1symbol
bean2.tenor=bean1tenor
bean2.symbol=bean2symbol
bean2.tenor=bean2tenor
或更简单:
symbol1=bean1symbol
tenor2=bean1tenor
symbol2=bean2symbol
tenor2=bean2tenor
因此,请注意,您的属性名称是全局唯一的
对于已经存在的属性,请查看如何与我们共享一个最小的示例或代码片段?所有代码都已添加到github(上面的链接)。无论如何,为引用更新了一些代码片段我猜spring将两个属性文件引入同一名称空间,因此当bean2.properties在bean1.properties之后读取时,它会覆盖属性定义。在这之后,属性将应用于bean。如果它已经按照上述方法工作,我们正在寻找替代方案的可能性,但看起来这是Spring工作方式中固有的。谢谢你的解释很高兴解释有帮助。请考虑将它标记为你的问题的答案,以便更好地帮助他人解决同样的问题。