PSQL 本地数据库的"dataSource or dataSourceClassName or jdbcUrl is required"



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

知道如何解决这个问题,或者如何将本地应用程序与本地数据库连接吗?

编辑1:完整的错误是ERROR 6478 --- [nio-5000-exec-7] com.zaxxer.hikari.HikariConfig: HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.我认为示例中使用的HikariDataSource是问题所在?我尝试与这里给出的PostgreSQL示例建立连接,我的数据库运行良好。

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

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

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

我使用以下配置在本地配置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

最新更新