Maven应用程序(Java/Scala)中的自定义配置文件

问题描述:

我有一个用Scala编写的Maven项目,并且部署为.jar。该项目具有典型的结构:Maven应用程序(Java/Scala)中的自定义配置文件

project-root 
|__src 
    |__main 
    | |__scala 
    | |__resources 
    | 
    |__test 
     |__scala 
     |__resources 

我在应用程序中有很多硬编码值,我想提取到配置文件。

我可以在任何地方创建一个文本配置文件,从代码中读取它并使用参数,但我正在寻找最佳实践/方法。我想把这件事考虑在内:

  • 有没有办法让我可以更改配置值,而不必重建.jar?这将是非常实际的。
  • 哪里会是该文件的最佳位置?例如,创建一个project-root/src/config目录并将文件放在那里?
  • 关于选择不同格式的任何显着的原因?我会使用XML,但是我已经看到相当多的YAML和HOCON ...

如果您希望能够在不构建jar的情况下更改配置值,则需要配置外部到神器。有许多方法可以修改内置的jar的内容,但我不认为这就是你想要做的。如果你想配置你可以随时更改,请将它放在jar外面并在运行时在Classpath中引用它。

如果您想保留在工件上,并在更改值时重新构建,请将配置文件保存在src/main/resources中。 Maven会自动将它打包到您的jar文件中,并放在归档的根目录中。

至于格式,这可能是个人喜好。读取YAML通常需要另外一个库(例如snakeyml)来有效地解析,所以如果您想让库保持依赖关系,可以查看.config或.properties文件。否则,对于复杂的配置,XML和YAML总是很好。