一尘不染

我应该在Spring Boot项目上的哪里存储开发凭证?

spring-boot

我应该在Spring Boot项目上的哪里存储开发凭证,以便不将其提交到存储库?最标准的方法是什么?

在其他框架(Rails,Clojure)中,我曾经有一个文件,我没有将该文件提交到该信息所在的存储库中。诸如辅助application.properties之类的东西被合并并且永远不会提交。这样的事情存在吗?

我正在部署到Heroku,该站点在Spring可以获取的环境变量中提供凭据,因此,这一部分已解决。如果我在其他地方部署,它将是一个类似的配置。

Spring Boot Docs第24章“外部化配置”中,列出了定义属性的所有位置。我浏览了该列表,试图找到合适的凭据位置,但找不到:

您的主目录上的Devtools全局设置属性(在devtools处于活动状态时,为〜/ .spring-boot-
devtools.properties)。

这不是devtools的事情,因为您可能想在本地开发禁用的洪水。

测试上的@TestPropertySource批注。

与测试无关

测试中的@ SpringBootTest#properties批注属性。

再次,不测试。

命令行参数。

我宁愿在命令行中没有凭据,因为这些凭据通常在计算机中公开,因此,另一个程序可以将其获取。但是除此之外,开发时我没有运行命令。我正在从IntelliJ触发应用程序。

来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联JSON)

与下面的环境变量/系统属性相同。

ServletConfig的初始化参数。ServletContext的初始化参数。来自Java:comp / env的JNDI属性。

这些在开发本地生成jar时似乎根本不适用,

Java系统属性(System.getProperties())。

我不确定设置它们的合适方法,但是这很费力。

操作系统环境变量。

我要么将它们设置在对新开发人员不透明的操作系统上,要么将它们设置在IntelliJ运行配置文件中,这使它们成为存储库的一部分,而这正是我要避免的事情。

一个RandomValuePropertySource,仅具有random。*属性。

它们不是随机的。

打包的jar之外的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)

可能是这样,但是我不确定该文件应位于何处。

打包在jar中的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)

我希望能够将配置文件特定的应用程序属性提交到存储库,因此,我无法在这些文件中存储凭据。

打包的jar之外的应用程序属性(application.properties和YAML变体)。

可能是这样,但是我不确定该文件应位于何处。

打包在jar中的应用程序属性(application.properties和YAML变体)。

我想提交该文件,因此,我无法在其中存储凭据。

@Configuration类上的@PropertySource批注。默认属性(使用SpringApplication.setDefaultProperties指定)。

使用这样的东西,我可以自己做,从未提交的文件中选择属性,但是我有兴趣遵循Spring Boot的最佳和通用做法,而不是自己做;特别是在我刚开始的时候。


阅读 375

收藏
2020-05-30

共1个答案

一尘不染

Spring-
boot允许您在不同位置外部化配置。对于有问题的场景,可以application.properties在下放置一个文件${PROJECT_ROOT}/config/。这些属性将覆盖任何其他定义的属性。在这种情况下,它不会打包在可部署工件中。
查看应用程序属性文件以获取更多详细信息。

在下面提供一个示例配置文件config/application.properties.example作为一个良好的起点。该文件可以受版本控制。为避免意外提交,请忽略其他所有内容。

使用git,忽略文件可以包含以下代码段(忽略以.example和结尾的文件,所有内容README.md除外):

.gitignore

/config/*
!/config/README.md
!/config/*.example
2020-05-30