代码之家  ›  专栏  ›  技术社区  ›  Richard

变量的Spring引导约定

  •  10
  • Richard  · 技术社区  · 7 年前

    application.yml 我的spring boot应用程序的文件如下:

    spring:
      url: localhost
    email:
      from: something@gmail.com
    app:
      uuid: 3848348j34jk2dne9
    

    我想将这些配置属性连接到我的应用程序中的不同组件中,如下所示:

    @Component
    public class FooA {
        private final String url;
    
        public FooA(@Value("${spring.url}") String url) {
            this.url = url
        }
    }
    
    @Component
    public class FooB {
        private final String from;
    
        public FooA(@Value("${email.from}") String from) {
            this.from = from
        }
    }
    
    @Component
    public class FooC {
        private final String uuid;
    
        public FooA(@Value("${app.uuid}") String uuid) {
            this.uuid = uuid
        }
    }
    

    Properties 对象,方法是在配置类内创建bean,加载带有所有配置变量的属性,并将属性bean自动连接到组件中。

    在这种情况下,最佳做法是什么?

    1 回复  |  直到 7 年前
        1
  •  17
  •   Magnus    7 年前

    正如您所确定的,注入配置的两个主要选择是使用 @Value 个人财产或 @ConfigurationProperties 在javabean配置对象上。

    你用哪一种取决于偏好。就我个人而言,我更喜欢使用配置对象。

    使用 允许您使用JSR-303 bean验证。
    如果需要,您还可以在javabean的setter中编写自己的自定义验证。
    您可以从非spring项目中注释配置bean,这允许您编写易于配置但不依赖spring的库。

    以下是我在使用spring配置时推荐的一些实践。

    • 创建个人 @配置属性 应用程序逻辑组件的对象。尽量使事情模块化,避免为整个应用程序配置创建垃圾场。

    • 不要使用相同的 @价值
      如果应用程序中的多个位置需要相同的配置,那么您可能应该将该值移动到配置对象中。
      跨多个应用程序使用相同的属性 @价值

    • spring 命名空间。
      例如,您的 spring.url is not one of the properties defined in the documentation .