2016-04-22 77 views
0

有类似在春季启动的application.properties没有明文密码

security.user.password = plainTextPassword

内春启动的application.properties显然是一个反模式,因为它可以防止代码从推向公共SCM。在我的非春季启动项目,我用

security.user.password = $ {} myPasswordFromMavenSettingsXML

,并把我的pom.xml内相应<properties/>参考。 使用Maven的资源过滤器插件,密码在构建时被替换,以便应用程序在构建和部署后可以访问实际的纯文本密码。

由于某些原因,Maven的资源过滤器插件在这种情况下不起作用。有没有办法让不提供明文密码给SCM,让Spring Boot在构建时插入它们?

回答

4

春季引导有多种机制提供externalized configuration。一些示例是命令行参数,环境变量以及打包JAR以外的应用程序属性。

我最常做的:

本地我们配置一些环境变量。大多数(如果不是全部的话)IDE允许您在运行配置中配置环境变量。

例如,如果您不想公开spring.datasource.password属性,则可以设置一个名为SPRING_DATASOURCE_PASSWORD的环境变量。

当我们部署到另一个环境时,我们通常会选择在应用程序JAR/WAR所在的同一文件夹中添加另一个application.properties或application.yml文件,因为Spring引导也会选择它。


另一种解决方案是使用Spring cloud,因为它具有config servicë其可被用作微服务提供配置。配置也可以使用SCM进行版本控制,但您可以将其放在未连接到源代码的单独系统上。

+0

使用'-DSECURITY_USER_PASSWORD = password'工作,但我选择将'conf/application.properties'中的机密属性也用于不同的配置文件。此外,我使用'$ {random.value}'作为常规'application.properties'中的值,并通过Maven配置文件将'SECURITY_USER_PASSWORD'环境变量提供给实际部署到生产环境。 – Alex

+0

为了处理不同的配置文件,我只在IDE中有多个运行配置,每个运行配置都有不同的环境变量。 – g00glen00b

+0

这是本地可以完成的,但是如何在没有配置数据文件可以部署的远程服务器上执行该操作。因此我不能选择像'produdction-profile.properties'这样的东西。 – Alex