简体   繁体   English

如何让 STS 4 识别 ~/.bash_profile 文件中定义的环境变量?

[英]How do I get STS 4 to recognize environment variables defined in my ~/.bash_profile file?

I'm using STS 4.6.2.RELEASE on Mac OS X and am attempting to build a Spring Boot 2 project.我在 Mac OS X 上使用 STS 4.6.2.RELEASE 并尝试构建 Spring Boot 2 项目。 I have defined these environment variables in my ~/.bash_profile file...我在 ~/.bash_profile 文件中定义了这些环境变量...

export PG_DB_NAME=cardmania
export PG_DB_USER=cardmania
export PG_DB_PASS=password
export PG_DB_HOST=localhost

Then in my src/main/resources/application.properties file, I have defined然后在我的 src/main/resources/application.properties 文件中,我定义了

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

spring.jpa.hibernate.ddl-auto=create

spring.jpa.hibernate.show-sql=true

spring.datasource.url=jdbc:postgresql://${PG_DB_HOST:localhost}:5432/${PG_DB_NAME}

spring.datasource.username=${PG_DB_USER}
spring.datasource.password=${PG_DB_PASS}

However, when I start my Spring Boot app from within STS by right-clicking on my project and selecting "Run As" -> "Spring Boot App," I get this error...但是,当我通过右键单击我的项目并选择“运行方式”->“Spring Boot 应用程序”从 STS 中启动 Spring Boot 应用程序时,我收到此错误...

org.postgresql.util.PSQLException: FATAL: role "${PG_DB_USER}" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2532) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2644) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:137) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:255) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:217) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.14.jar:42.2.14]
    at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.14.jar:42.2.14]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na]
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.17.Final.jar:5.4.17.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.7.RELEASE.jar:5.2.7.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.7.RELEASE.jar:5.2.7.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.7.RELEASE.jar:5.2.7.RELEASE]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

I do not encounter this error if I run "java -jar target/cardmania-0.0.1-SNAPSHOT.jar" on a normal shell command line.如果我在正常的 shell 命令行上运行“java -jar target/cardmania-0.0.1-SNAPSHOT.jar”,我不会遇到此错误。

I believe this behaviour has more to do with your IDE than your environment variables configurations.我相信这种行为与您的 IDE 的关系比您的环境变量配置更多。 I faced the same problem and found a workaround, Eclipse STS lets you define environment variables for the Run Configuration:我遇到了同样的问题并找到了解决方法,Eclipse STS 允许您为运行配置定义环境变量:

Eclipse 中的环境变量

You could check this answer too, maybe it gives you other approaches你也可以检查这个答案,也许它会给你其他方法

If you launch STS from Finder, Dock or Spotlight, you should edit ~/.MacOSX/environment.plist , but not ~/.bash_profile .如果您从 Finder、Dock 或 Spotlight 启动 STS,您应该编辑~/.MacOSX/environment.plist ,而不是~/.bash_profile

see also:也可以看看:

If you launch STS from command line(bash), it is not required.如果从命令行 (bash) 启动 STS,则不需要。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何为运行测试设置默认的Spring Boot配置文件(不使用环境变量)? - How do I set the default Spring Boot profile for running tests (without using environment variables)? 在Spring Boot中,即使未设置适当的环境变量,如何为其他配置文件构建JAR文件? - In Spring Boot, how do you build a JAR file for a different profile even if proper environment variables have not been set? 在Java 8中,如何在不在我的环境中对其进行硬编码的情况下获取主机名? - In Java 8, how do I get my hostname without hard-coding it in my environment? 如何使用下载的更新文件更新当前的sts版本 - How do I update the current sts version using the update file downloaded 如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件? - How do you get current active/default Environment profile programmatically in Spring? Spring STS未加载环境变量,但正在运行Maven - Spring STS not loading environment variables but running maven works 如何在Spring STS仪表板中更改语言 - How do I change the language in Spring STS Dashboard 如何在STS中使用现有的Spring 3.0.5项目? - How do I use an existing Spring 3.0.5 project in STS? 配置文件特定属性与环境变量 - Profile specific properties vs Environment variables 我如何使用Postgresql使Spring识别第一个大写字母 - how do I get spring to recognize the first capital letter using postgresql
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM