对于psql本地数据库,“dataSource或dataSourceClassName或jdbcUrl是必需的”

时间:2017-10-24 13:31:13

标签: java postgresql heroku

我刚刚完成了Heroku Java教程,想尝试使用本地数据库而不是在线数据库。所以我添加了postgres://test:password@localhost/sample_db作为DATABASE_URL配置var并使用heroku local在本地运行示例应用程序。但是当我访问"dataSource or dataSourceClassName or jdbcUrl is required"时,我遇到了localhost:5000/db,这是访问数据库的页面。

知道如何解决此问题或如何将本地应用程序与本地数据库连接?

EDIT1:完整错误是ERROR 6478 --- [nio-5000-exec-7] com.zaxxer.hikari.HikariConfig: HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.我认为示例中使用的HikariDataSource是问题所在?我尝试使用给定here的PostgreSQL示例建立连接,并且我的数据库工作正常。

EDIT2:我尝试使用dataSource()而不是BasicDataSource重写HikariDataSource方法,它可以正常工作(适用于本地和部署)。这肯定是一个HikariCP问题,或者更像是我不知道如何使用HikariCP和本地数据库。 HikariCP解决方案适用于部署但不适用于本地。肯定想知道将HikariCP与本地数据库一起使用的正确方法是什么!

2 个答案:

答案 0 :(得分:1)

我不确定您关注的是哪个示例,但有时您需要将$JDBC_DATABASE_URL设置为jdbc:postgresql://localhost:5432/appdb之类的值。

通常,错误是说Hikari(数据库连接池)没有设置jdbcUrl。这也可能意味着服务器没有看到您的DATABASE_URL。尝试将其放在.env文件中,然后使用heroku local web运行应用。

答案 1 :(得分:0)

我使用以下配置在本地配置了Hikari:

<bean id="hikariSlaveDataSource" class="com.zaxxer.hikari.HikariDataSource"
         depends-on="jdbcKeyStore">
        <constructor-arg>
            <bean class="com.zaxxer.hikari.HikariConfig">
                <constructor-arg>
                    <bean factory-bean="jdbcKeyStore" factory-method="getDbProperties">
                        <constructor-arg value="jdbc.slave" />
                    </bean>
                </constructor-arg>
                <property name="dataSourceClassName"
                    value="com.mysql.cj.jdbc.MysqlDataSource" />
                <property name="idleTimeout">
                    <bean factory-bean="jdbcKeyStore" factory-method="getSlaveIdleTimeout">
                    </bean>
                </property>
                <property name="maximumPoolSize">
                    <bean factory-bean="jdbcKeyStore" factory-method="getSlaveMaximumPoolSize">
                    </bean>
                </property>
                <property name="connectionTimeout">
                    <bean factory-bean="jdbcKeyStore" factory-method="getSlaveConnectionTimeout">
                    </bean>
                </property>
                <property name="maxLifetime" value="25200000" />
                <property name="leakDetectionThreshold" value="60000" />
            </bean>
        </constructor-arg>
    </bean>

然后使用此数据源创建一个实体管理器,并使用已定义的实体管理器创建txnManager