代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

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

  •  13
  • Pablo Fernandez  · 技术社区  · 7 年前

    在其他框架(Rails、Clojure)中,我习惯于有一个文件,但我不将其提交给信息所在的回购协议。类似于二次应用程序。被合并但从未提交的属性。这样的事情存在吗?

    Spring Boot Docs, chapter 24, Externalized Configuration ,其中列出了定义属性的所有位置。我浏览了那个列表,试图找到合适的凭证位置,但我找不到:

    这不是devtools,因为您可能希望开发局部禁用的devloots。

    这与测试无关

    @SpringBootTest#属性注释属性。

    命令行参数。

    SPRING\u APPLICATION\u JSON的属性(嵌入在环境变量或系统属性中的内联JSON)

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

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

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

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

    RandomValuePropertySource,仅在Randomy*中具有属性。

    封装jar之外的特定于配置文件的应用程序属性(应用程序{Profile}。属性和YAML变体)

    这可能是,但我不确定该文件应该存放在哪里。

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

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

    这可能是,但我不确定该文件应该存放在哪里。

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

    (使用SpringApplication.setDefaultProperties指定)。

    2 回复  |  直到 7 年前
        1
  •  19
  •   fateddy    7 年前

    application.properties ${PROJECT_ROOT}/config/ . 这些特性将替代任何其他定义的特性。
    看看 Application property files

    在下面提供示例配置文件 config/application.properties.example 为了避免无意提交,请忽略其他所有内容。

    使用 git .example README.md ):

    .gitignore

    /config/*
    !/config/README.md
    !/config/*.example
    
        2
  •  1
  •   Abhijit Sarkar    7 年前

    这取决于您的配置。多亏了斯普林 Environment 抽象,您可以在运行时从环境中重写属性,因此根据您的部署,有许多方法可以做到这一点。然而,要注意的是,虚假的安全感可能是一种真正的痛苦。您希望将配置作为代码进行维护,这些代码可以进行版本控制、审查和审计,而不是作为某个人电脑上的文本文件来注入随机运行时变量。这是典型的“在我的机器上工作”问题。

    setenv.sh

    编辑 ,根据OP在评论中所说:

    gradle clean bootRun -Dmy.secret.key=whatever ,并在 build.gradle

    bootRun {
      systemProperties = System.properties
    }
    

    application-local.properties 这并不适用于Git,并使用 -Dspring.profiles.active=default,local 配置文件,在这种情况下,Spring将合并 application.properties 令人不快的 好主意,但你是个自由人,所以。。。

    settings.xml ).

    编辑2 ,如何在 应用属性

    my.secret.key=${MY_SECRET_KEY:default}
    

    If env变量 MY_SECRET_KEY 存在, my.secret.key default .