如何将文件的内容作为值传递给 Spring 属性?

ret*_*n 0 5 spring spring-boot

我正在使用 Spring JPA 访问我的数据库,但数据库的用户名和密码以两个文件的形式提供给我(username.txt 和password.txt)。安全准则是我们不应该在配置文件中粘贴密码或任何形式的密码(加密)。

我正在尝试找出方法来做这样的事情:

spring.datasource:
  url: <db url>
  username: "file:/path/username.txt"
  password: "file:/path/password.txt"
Run Code Online (Sandbox Code Playgroud)

有谁知道如何实现与此非常相似的东西?

附言。我想在此 spring 属性文件中保留特定于环境的凭据文件路径。有多种方法可以将文件内容作为环境变量 java -Dusername=${cat /path/username} 传递,但我想避免将我的配置放在 spring 属性文件之外。

编辑:用户名和密码以明文形式存储在单独的文件中。

Chi*_*ang 5

Spring Boot 2.4 引入了从文件中读取配置值的功能,其中目录和文件的名称是属性名称,文件内容是属性值。例如,给定目录结构

path/
  spring/
    datasource/
      username
      password
Run Code Online (Sandbox Code Playgroud)

application.yaml文件包含

spring.config.import: configtree:/path/
Run Code Online (Sandbox Code Playgroud)

那么环境将包含名为spring.datasource.username和 的属性spring.datasource.password


Abh*_*kar 3

您可以\xe2\x80\x99t 从 Spring 应用程序属性文件中读取文件的内容。但是您当然可以以编程方式配置数据源,并在代码中读取文件。

\n
@Configuration\npublic class DataSourceConfig {\n    \n    @Bean\n    public DataSource getDataSource() {\n        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();\n        dataSourceBuilder.driverClassName("org.h2.Driver");\n        dataSourceBuilder.url("jdbc:h2:mem:test");\n        dataSourceBuilder.username("SA");\n        dataSourceBuilder.password("");\n        return dataSourceBuilder.build();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

有关详细信息,请参阅这篇文章。I\xe2\x80\x99m 假设你知道如何使用 Spring Boot 读取文件,如果不知道,你可以看这篇文章。

\n


归档时间:

查看次数:

5541 次

最近记录:

1 年,10 月 前