通过覆盖 Java class 或属性文件来设置项目特定值,哪个更好?

Set project specific values by overriding Java class or Properties file, which is better?

我有一个库做报告,每个使用它的项目都需要提供自定义值。
所以我有两种设置这些值的方法:

  1. 使用属性文件
  2. 提供一个抽象 class 以提供库中的值并让项目覆盖它。

我的问题是哪个更好?


例如2 个值:消费者 & 生产者

选项 1 - 属性 application.yml:

consumer: con
producer: pro

然后读入一个属性class。

选项 2 - Java class:

Public Abstract Class MyConfig{
  // project will override method and return "con";
  protected abstract getConsumer();

  protected abstract getProducer();
}

使用 properties 文件的参数:
java 当大多数项目可以使用默认值时,这种方式可能更好。但是由于这里的大多数值确实需要针对每个项目进行定制,因此使用配置文件是一种更清晰、更容易且对核心业务污染更少的方式。

具体来说,如果我们改用java方式:

  • 需要多写几行

  • 需要担心注入新的class到spring

  • 不关心这个库的人会看到新的 class 并且需要弄清楚它的作用

  • 对于那些关心图书馆的人来说,他们将不得不深入研究许多 java 文件,而不是一个容易找到的 属性 文件更改相关值


使用参数Java
这与我们在 IDE 而不是文本编辑器中的文本中编写代码的原因相同。
使用配置文件,没有人检查配置的语义。如果底层库发生变化,编译器不会告诉你有什么问题。
使用 Java class,文档将作为方法注释到位,API 将被发现,因为您只需检查需要时可以覆盖的内容。
我们将遵循 Springboot 正在推送的内容,即基于 java 的配置。我们会避免愚蠢的错误,比如文本配置中的语法错误,这会破坏某些东西,等等。