如何访问 Spring Boot 中另一个文件中定义的 application.properties 中的值

问题描述 投票:0回答:2

我想从 application.properties 外包我的数据库连接和凭据,并在我的 application.properties 中访问它们。

我创建了一个名为 env.properties 的文件。

DB_USER=test
DB_PASSWORD=test
DB_URL=jdbc:mysql://localhost:3306/testDB

然后将文件导入到我的 application.properties 中并尝试访问这些值。

spring.application.name=CampusFlow
spring.config.import=optional:env.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=Environment#getProperty("DB_URL")
spring.datasource.username=Environment#getProperty("DB_USER")
spring.datasource.password=Environment#getProperty("DB_PASSWORD")

像这样,我无法访问变量的值。我如何访问这些值?

java spring-boot application.properties
2个回答
0
投票

您必须使用 ${} 表示法。

对我有用的例子:

application.yml

spring:
 config:
  import:
   env.properties
myvar: ${TEST}

env.属性

TEST=myvar

0
投票

问得好。最简单的方法就是像这样替换它们:

spring.application.name=CampusFlow
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}

但是,这不会从 env.properties 中获取,而是从环境变量中获取。实际上,它将按照以下特定顺序从 15 个位置获取:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

此外, spring.config.import 属性用于 Spring Cloud 配置服务器,它可以完全执行您想象的操作,但这需要维护/托管另一个应用程序等。所以我不想推荐它。

如果您想从文件中“注入”它们,可以推荐一个简单的替代方案,那就是使用 SPRING_APPLICATION_JSON (作为环境变量、jvm 参数或 spring 属性)并将内容以 JSON 格式放入,像这样的东西:

{
    "DB_USER": "test",
    "DB_PASSWORD": "test",
    "DB_URL": "jdbc:mysql://localhost:3306/testDB"
}

但是,在任何有意义的环境中,您都可以以安全的方式将变量注入到容器/运行时,并且很可能您不必执行部分文件配置,只需使用上面提到的占位符配置和注入的值即可。

© www.soinside.com 2019 - 2024. All rights reserved.