Spring Boot App 无法识别 application.yml 文件中的环境变量
Spring Boot App does not recognize environment variables in application.yml file
那里。我是 Java Spring Boot 的新手,我正在尝试在 application.yml[=42= 中设置环境变量].
我添加了 dotenv maven 依赖:
<!-- https://mvnrepository.com/artifact/io.github.cdimascio/java-dotenv -->
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>java-dotenv</artifactId>
<version>5.1.3</version>
</dependency>
我在 .env 文件中设置了变量:
SPRING_DATABASE_URL = jdbc://db_url
SPRING_DATABASE_USERNAME = username
SPRING_DATABASE_PASSWORD = password
在我的 application.yml 中:
spring:
datasource:
url: ${SPRING_DATABASE_URL}
username: ${env.SPRING_DATABASE_USERNAME}
password: ${env.SPRING_DATABASE_PASSWORD}
虽然 运行 应用程序我收到 jdbc 错误:
java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATABASE_URL}
我尝试了一些解决方案,例如:
export SPRING_DATABASE_URL = jdbc://db_url
或 application.yml:
url: ${env.SPRING_DATABASE_URL}
或
url: ${env.SPRING.DATABASE.URL}
或
url: ${SPRING.DATABASE.URL}
我做错了什么或遗漏了什么吗?感谢您的帮助,谢谢。
java-dotenv you use has been renamed to kotlin-dotenv。如果你查看它的文档,你就会知道它是如何使用的:
With Java
import io.github.cdimascio.dotenv.Dotenv;
Dotenv dotenv = Dotenv.load();
dotenv.get("MY_ENV_VAR1")
这不是 spring 引导所做的 - spring 引导不会使用任何 dotenv
来获取环境变量,因此该插件自然不会适用于您的用例。 env 文件将不起作用。
如果您在启动应用程序时定义环境变量来启动应用程序,它将起作用。要查看如何使用 vscode 传递环境变量,请参阅 。
我最近 运行 遇到了类似的问题,想通过 .env
和 application.yml
设置环境变量 - 这是我发现的:
首先,正如您提到的,您必须将 java-dotenv 依赖项添加到 pom.xml
:
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>2.2.0</version>
</dependency>
然后在项目的根目录(pom.xml
所在的位置)创建 .env
文件并编写环境变量,例如ENV_PORT=8081
.
在你可以使用这个环境变量之前,你必须在启动应用程序时将 .env
文件的内容与 Spring 引导“绑定”以使其全局可用。根据 this thread,这可以通过简单地更改 spring 的主要入口点(您初始化框架的位置)来实现,如下所示:
@SpringBootApplication
public class MySpringApplication {
public static void main(String[] args) {
Map<String, Object> env = Dotenv.load()
.entries()
.stream()
.collect(
Collectors.toMap(DotenvEntry::getKey, DotenvEntry::getValue));
new SpringApplicationBuilder(MySpringApplication.class)
.environment(new StandardEnvironment() {
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
super.customizePropertySources(propertySources);
propertySources.addLast(new MapPropertySource("dotenvProperties", env));
}
}).run(args);
}
}
就是这样,现在您可以像这样在 application.yml
中引用您的环境变量:
server:
port: ${ENV_PORT}
希望对您有所帮助!如果您有兴趣,here 也是我使用这种方法的完整工作示例。
那里。我是 Java Spring Boot 的新手,我正在尝试在 application.yml[=42= 中设置环境变量].
我添加了 dotenv maven 依赖:
<!-- https://mvnrepository.com/artifact/io.github.cdimascio/java-dotenv -->
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>java-dotenv</artifactId>
<version>5.1.3</version>
</dependency>
我在 .env 文件中设置了变量:
SPRING_DATABASE_URL = jdbc://db_url
SPRING_DATABASE_USERNAME = username
SPRING_DATABASE_PASSWORD = password
在我的 application.yml 中:
spring:
datasource:
url: ${SPRING_DATABASE_URL}
username: ${env.SPRING_DATABASE_USERNAME}
password: ${env.SPRING_DATABASE_PASSWORD}
虽然 运行 应用程序我收到 jdbc 错误:
java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATABASE_URL}
我尝试了一些解决方案,例如:
export SPRING_DATABASE_URL = jdbc://db_url
或 application.yml:
url: ${env.SPRING_DATABASE_URL}
或
url: ${env.SPRING.DATABASE.URL}
或
url: ${SPRING.DATABASE.URL}
我做错了什么或遗漏了什么吗?感谢您的帮助,谢谢。
java-dotenv you use has been renamed to kotlin-dotenv。如果你查看它的文档,你就会知道它是如何使用的:
With Java
import io.github.cdimascio.dotenv.Dotenv;
Dotenv dotenv = Dotenv.load();
dotenv.get("MY_ENV_VAR1")
这不是 spring 引导所做的 - spring 引导不会使用任何 dotenv
来获取环境变量,因此该插件自然不会适用于您的用例。 env 文件将不起作用。
如果您在启动应用程序时定义环境变量来启动应用程序,它将起作用。要查看如何使用 vscode 传递环境变量,请参阅
我最近 运行 遇到了类似的问题,想通过 .env
和 application.yml
设置环境变量 - 这是我发现的:
首先,正如您提到的,您必须将 java-dotenv 依赖项添加到 pom.xml
:
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>2.2.0</version>
</dependency>
然后在项目的根目录(pom.xml
所在的位置)创建 .env
文件并编写环境变量,例如ENV_PORT=8081
.
在你可以使用这个环境变量之前,你必须在启动应用程序时将 .env
文件的内容与 Spring 引导“绑定”以使其全局可用。根据 this thread,这可以通过简单地更改 spring 的主要入口点(您初始化框架的位置)来实现,如下所示:
@SpringBootApplication
public class MySpringApplication {
public static void main(String[] args) {
Map<String, Object> env = Dotenv.load()
.entries()
.stream()
.collect(
Collectors.toMap(DotenvEntry::getKey, DotenvEntry::getValue));
new SpringApplicationBuilder(MySpringApplication.class)
.environment(new StandardEnvironment() {
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
super.customizePropertySources(propertySources);
propertySources.addLast(new MapPropertySource("dotenvProperties", env));
}
}).run(args);
}
}
就是这样,现在您可以像这样在 application.yml
中引用您的环境变量:
server:
port: ${ENV_PORT}
希望对您有所帮助!如果您有兴趣,here 也是我使用这种方法的完整工作示例。