java - 使用 Java 连接到 heroku Postgres 数据库

标签 java spring hibernate postgresql heroku

我无法连接到 heroku 数据库,当我将我的应用程序部署到 heroku 时,我在日志中得到了这个:

[localhost-startStop-1] WARN org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [path/DataBaseConfig.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

我的数据库配置:

public class DataBaseConfig {

@Resource
private Environment env;

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws URISyntaxException{
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();

    em.setDataSource(dataSource());
    em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    em.setJpaProperties(getHibernateProperties());

    return em;
}

@Bean
public BasicDataSource dataSource() throws URISyntaxException {
    URI dbUri = new URI(System.getenv("jdbc:postgresql://user:password@Host:5432/databaseName"));

    String username = dbUri.getUserInfo().split(":")[0];
    String password = dbUri.getUserInfo().split(":")[1];
    String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath();

    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setUrl(dbUrl);
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);

    return basicDataSource;
}
}

我做错了什么?

最佳答案

Heroku 使用 DATABASE_URL 环境变量来存储主数据库的位置。所以替换:

System.getenv("jdbc:postgresql://user:password@Host:5432/databaseName")

与:

System.getenv("DATABASE_URL")

关于java - 使用 Java 连接到 heroku Postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770879/

相关文章:

java - 检查对象是否被引用,以防止在不修改数据库的情况下软删除

java - 从 JavaFX 开始 - JavaFX 版本和 "development patterns"问题

java - 使用 Spring Security + CAS 获取循环重定向,但应该可以工作

java - 将 GWT 项目更改为 Maven 项目

java - 使用 JWT/antMatchers 阻止访问的 Spring 安全配置

java - Spring @autowired 注释与 java TimerTask 不起作用

java - Hibernate - 一对一 IdentifierGenerationException

java - Hibernate代理作为HashMap中的键

java - 我应该如何设置 CLASSPATH?

java - springboot java oracle过程调用游标