问题描述
Spring-
boot允许您在不同位置外部化配置。对于有问题的场景,可以application.properties
在下放置一个文件${PROJECT_ROOT}/config/
。这些属性将覆盖任何其他定义的属性。在这种情况下,它不会打包在可部署工件中。
查看应用程序属性文件以获取更多详细信息。
在下面提供一个示例配置文件config/application.properties.example
作为一个良好的起点。该文件可以受版本控制。为避免意外提交,请忽略其他所有内容。
使用git
,忽略文件可以包含以下代码段(忽略以.example
和结尾的文件,所有内容README.md
除外):
.gitignore :
/config/*
!/config/README.md
!/config/*.example
解决方法
我应该在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的最佳和通用做法,而不是自己做;特别是在我刚开始的时候。