那里。我是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}
我是做错了什么还是遗漏了什么?我感谢你的帮助,谢谢你。
我最近遇到了一个类似的问题,希望通过.env
和application.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
导入io.github.cdimascio.dotenv.dotenv;
Dotenv Dotenv=Dotenv.load((;
dotenv.get("MY_ENV_VAR1"(
这不是spring-boot的作用-spring-boot不会使用任何dotenv
来获取环境变量,因此插件自然不会适用于您的用例,因此.env文件也不会工作。
如果你在启动it应用程序时启动了定义环境变量的应用程序,它就会起作用。要查看如何使用vscode传递环境变量,请参阅此线程。