从Spring获取属性数据的更好方法

时间:2019-05-24 21:00:35

标签: java spring-boot

我在外部化的application.properties文件中保存了许多(100个)属性值。
根据文档,共有3种获取方式:

  1. 使用Environment对象
  2. 读取application.properties
  3. 使用@ConfigurationProperties从application.properties文件中读取属性
  4. 使用@Value批注读取属性。

哪种方法是最好的?在设计方面彼此优缺点是什么?

1 个答案:

答案 0 :(得分:2)

超级简短答案: 这取决于

简短答案:混合使用这三种方法。

长答案:

拥有如此多的属性(超过100个),可以合理地假设它们不都是同一主题领域,例如可能有用于配置电子邮件设置的属性(SMTP主机,密码等),用于配置业务规则的属性,用于Web服务终结点地址的属性...

将所有这些属性集中在一个巨大的@ConfigurationProperties对象中是一个坏主意,因为它违反了Separation of Concerns设计原则。

因此,准则:

  • 如果您的属性名称是动态的,请使用Environment

  • 以编程方式获取它们
  • 如果多个组件需要相同的属性集,请使用@ConfigurationProperties bean。

  • 如果您的组件仅需要一个或几个属性,请使用@Value

  • 如果您的组件需要许多属性,请考虑使用@ConfigurationProperties bean。

与所有准则一样,这些不是硬性规定,只是建议。您可以根据需要为单个属性创建一个@ConfigurationProperties bean,但这有点矫kill过正,并且一个组件中可以有10个以上带有@Value注释的字段,但是将它们合并到bean类中可能会更好,特别是如果您需要逻辑来解释/后处理属性值时。