使用 @PropertySource 覆盖属性的说明

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 @PropertySource 覆盖属性的说明相关的知识,希望对你有一定的参考价值。

使用 @PropertySource 覆盖属性的说明

  1. 例如,给定两个属性文件 a.properties 和 b.properties,请考虑以下两个配置类,它们使用 @PropertySource 注解来引用它们

    @Configuration
     @PropertySource("classpath:/com/myco/a.properties")
     public class ConfigA  
     
     @Configuration
     @PropertySource("classpath:/com/myco/b.properties")
     public class ConfigB  
    
  2. 覆盖顺序取决于在应用程序上下文中注册这些类的顺序

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
     ctx.register(ConfigA.class);
     ctx.register(ConfigB.class);
     ctx.refresh();
    
  3. 因为 ConfigB 是最后注册的,所以 b.properties 中的属性将覆盖 a.properties 中存在的所有重复项。

  4. 使用 @PropertySource 注解严格控制属性源的顺序可能是不可行的。例如,如果上面的 @Configuration 类是通过组件扫描注册的,则顺序很难预测

  5. 根据 Java8 的约定,@PropertySource 注解可以重复。但是,所有此类 @PropertySource 注解都需要在同一级别上声明:直接在配置类上声明,或者在同一自定义注解上作为元注解声明。不建议将直接注解和元注解混合使用,因为直接注解将有效覆盖元注解

以上是关于使用 @PropertySource 覆盖属性的说明的主要内容,如果未能解决你的问题,请参考以下文章

@Import 覆盖 Spring @PropertySource

PropertySource顺序

让 IntelliJ 知道属性文件

如何创建依赖于 Spring Bean 的自定义 Spring PropertySource

使用带有外部 JSON 文件的 @PropertySource 的 Spring 属性配置

使用 @PropertySource 将 .properties 文件中的所有值注入属性(或映射)