如何在spring框架中正确访问环境变量?

mhd8tkvw  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(256)

好吧,雅尔,我到处找了。免责声明:这是我的第一个spring项目,所以我可能只是犯了个错误。
我将在heroku平台上部署一个应用程序。我可以推送到github主分支,它将自动部署到heroku。长话短说:我正在尝试设置本地环境以运行它自己的数据库,而生产环境将运行它自己的数据库(原因很明显)。
我正在使用application.properties以及 application-{profile}.properties 这两个文件的命名约定: application-local.properties ,和 application-prod.properties . 您可以查看对这个堆栈溢出原因的答案的引用,以及spring文档中的这个引用。
我已经在本地系统中设置了环境变量,并且可以在cmd中通过运行 echo %WHATEVER_ENV% 问题:这是my application.properties文件的外观: spring.profiles.active=${SPRING_PROFILES_ACTIVE} 如果我将此更改为: spring.profiles.active=local 它将从本地读取,这是硬编码的值。但是如果我把它改成prod,它确实读取了正确的文件,但是我得到了错误(顺便说一下,我已经在我的系统中设置了所有这些值);我的application-prod.properties文件如下所示

spring.datasource.url= ${SPRING_DATASOURCE_URL}
spring.datasource.username= ${SPRING_DATASOURCE_USERNAME}
spring.datasource.password= ${SPRING_DATASOURCE_PASSWORD}
spring.jpa.database-platform= ${SPRING_JPA_DATABASE-PLATFORM}
spring.datasource.driver-class-name=org.postgresql.Driver

我的跑步日志显示

Factory method 'entityManagerFactory' threw exception; 
nested exception is java.lang.RuntimeException: Driver 
org.postgresql.Driver claims to not accept jdbcUrl, 
${SPRING_DATASOURCE_URL}

^^^这是我的问题。这就好像spring没有引入env变量一样。我做错什么了?

n53p2ov0

n53p2ov01#

我显然需要在ide中设置环境变量。然而,我仍然想知道为什么环境变量没有从我的系统中拉进来。
编辑:上面的方法奏效了,但也要感谢@kushal,因为他的解决方案才是真正的解决方案。我需要重新启动ide

1tuwyuhd

1tuwyuhd2#

您可能需要重新启动ide以便从系统的环境变量中获取最新的值,ide将变量存储在缓存中,需要重新启动以便刷新

相关问题