我在外部化的application.properties文件中保存了许多(100个)属性值。
根据文档,共有3种获取方式:
Environment
对象@ConfigurationProperties
从application.properties文件中读取属性@Value
批注读取属性。哪种方法是最好的?在设计方面彼此优缺点是什么?
答案 0 :(得分:2)
超级简短答案: 这取决于。
简短答案:混合使用这三种方法。
长答案:
拥有如此多的属性(超过100个),可以合理地假设它们不都是同一主题领域,例如可能有用于配置电子邮件设置的属性(SMTP主机,密码等),用于配置业务规则的属性,用于Web服务终结点地址的属性...
将所有这些属性集中在一个巨大的@ConfigurationProperties
对象中是一个坏主意,因为它违反了Separation of Concerns设计原则。
因此,准则:
如果您的属性名称是动态的,请使用Environment
如果多个组件需要相同的属性集,请使用@ConfigurationProperties
bean。
如果您的组件仅需要一个或几个属性,请使用@Value
如果您的组件需要许多属性,请考虑使用@ConfigurationProperties
bean。
与所有准则一样,这些不是硬性规定,只是建议。您可以根据需要为单个属性创建一个@ConfigurationProperties
bean,但这有点矫kill过正,并且一个组件中可以有10个以上带有@Value
注释的字段,但是将它们合并到bean类中可能会更好,特别是如果您需要逻辑来解释/后处理属性值时。