我刚刚完成了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与本地数据库一起使用的正确方法是什么!
答案 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