在Spring Boot属性文件中外部化密码

时间:2019-09-27 03:37:22

标签: spring-boot

我有application.properties文件

具有

spring.profiles.active=local

我有application-local.properties,其中包括许多字段

api.password = password123

如您所见,我在属性文件中使用了硬编码的password123。

假设我在Windows上,并且我在具有

的Windows上有app.properties文件
 api.password = password123

我想通过app.properties读取Spring Boot属性文件中的api.password

我该如何实现?

3 个答案:

答案 0 :(得分:3)

启动参数

如果要从非标准位置读取属性,则可以使用--spring.config.location--spring.config.additional-location参数启动应用程序。

$ java -jar app.jar --spring.config.location=file:./app.properties

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

@PropertySource

如果您不控制启动参数,则可以使用@PropertySource注释。 只需注释您的主类(或任何其他配置):

 @PropertySource("file:.app.properties")

您可以设置ignoreResourceNotFound=true,因此即使文件不存在,应用程序也将启动。

https://docs.spring.io/spring/docs/5.1.9.RELEASE/javadoc-api/org/springframework/context/annotation/PropertySource.html

阅读文档

实际上有 17种方法将属性传递给Spring-Boot应用程序。

我建议您熟悉该约定,因为了解哪个文件优先是至关重要的:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config

答案 1 :(得分:1)

可能您可以像下面那样使用--spring.config.location

$ java -jar myApp.jar --spring.config.location = file:/file/app.properties目录

答案 2 :(得分:0)

我用过jasypt:https://github.com/ulisesbocchio/jasypt-spring-boot 加密密码,然后提供解密字符串(jasypt.encryptor.password)作为启动参数。这样,配置中和git-repos上都没有useabel密码。