Spring Boot应用程序无法识别application.yml文件中的环境变量



那里。我是JavaSpringBoot的新手,我正在尝试在application.yml.中设置环境变量

我添加了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

在我的申请中。yml:

spring:
datasource:
url: ${SPRING_DATABASE_URL}
username: ${env.SPRING_DATABASE_USERNAME}
password: ${env.SPRING_DATABASE_PASSWORD}

在运行应用程序时,我收到jdbc错误:

java.lang.RuntimeException:驱动程序org.postgresql.Driver声称不接受jdbcUrl,${SPRING_DATABASE_URL}

我尝试过一些解决方案,比如:

export SPRING_DATABASE_URL = jdbc://db_url

或在应用中。yml:

url: ${env.SPRING_DATABASE_URL}

url: ${env.SPRING.DATABASE.URL}

url: ${SPRING.DATABASE.URL}

我是做错了什么还是遗漏了什么?我感谢你的帮助,谢谢你。

我最近遇到了一个类似的问题,希望通过.envapplication.yml设置环境变量-以下是我的发现:

首先,正如您提到的,您必须将javadotenv依赖项添加到pom.xml:

<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>2.2.0</version>
</dependency>

然后在项目的根目录(pom.xml所在的位置(中创建.env文件,并编写环境变量,例如ENV_PORT=8081

在您可以使用这个环境变量之前,您必须"绑定";当您启动应用程序以使其全局可用时,使用Spring Boot的.env文件的内容。根据这个线程,这可以通过简单地更改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}

希望这能有所帮助!如果您感兴趣,这里还有一个完整的工作示例,我正在使用这种方法。

您使用的java dotenv已重命名为kotlin dotenv。如果你看一下它的文档,你会发现它是如何使用的:

使用Java

导入io.github.cdimascio.dotenv.dotenv;

Dotenv Dotenv=Dotenv.load((;

dotenv.get("MY_ENV_VAR1"(

这不是spring-boot的作用-spring-boot不会使用任何dotenv来获取环境变量,因此插件自然不会适用于您的用例,因此.env文件也不会工作。

如果你在启动it应用程序时启动了定义环境变量的应用程序,它就会起作用。要查看如何使用vscode传递环境变量,请参阅此线程。

最新更新