【问题标题】:"dataSource or dataSourceClassName or jdbcUrl is required" for psql local databasepsql 本地数据库的“dataSource or dataSourceClassName or jdbcUrl is required”
【发布时间】:2018-04-05 07:56:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • @LucianovanderVeekens 将localhost:5000 链接到Java 应用程序,我尝试添加postgres:// 并没有链接。

标签: java postgresql heroku


【解决方案1】:

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

一般来说,错误是说 Hikari(数据库连接池)没有 jdbcUrl 集。这也可能意味着服务器没有看到您的DATABASE_URL。尝试将其放入您的 .env 文件并使用 heroku local web 运行应用程序。

【讨论】:

  • 我确实有一个带有DATABASE_URL 的 .env 文件。当您说JDBC_DATABASE_URL 时,您的意思是为它创建一个配置变量吗?我在关注this btw。
【解决方案2】:

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

【讨论】:

  • 面临同样的错误“dataSource or dataSourceClassName or jdbcUrl is required”,因为定义中缺少 dataSourceClassName 属性
猜你喜欢
  • 2019-04-26
  • 2022-01-07
  • 2018-09-12
  • 1970-01-01
  • 2012-03-25
  • 2021-02-12
  • 2021-10-13
  • 2020-11-30
  • 2014-06-28
相关资源
最近更新 更多