获取 SQLException:当使用系统属性定义资源时,Driver:org.hsqldb.jdbcDriver 为 tomee 中的 URL 返回 null

Posted

技术标签:

【中文标题】获取 SQLException:当使用系统属性定义资源时,Driver:org.hsqldb.jdbcDriver 为 tomee 中的 URL 返回 null【英文标题】:Getting SQLException: Driver:org.hsqldb.jdbcDriver returned null for URL in tomee when Resource is defined with system properties 【发布时间】:2016-09-01 08:28:46 【问题描述】:

我尝试通过系统属性定义一个 DataSource 资源(与将其放入 tomee.xml 相比)并获得与 Getting SQLException: Driver:org.hsqldb.jdbcDriver returned null for URL in tomee 完全相同的结果。

不同的是,我为属性 jdbcDriver 提供了一个值,并且我通过系统属性定义了我的 DataSource:

JAVA_OPTS="$JAVA_OPTS -DmyDS='new://Resource?type=javax.sql.DataSource'"
JAVA_OPTS="$JAVA_OPTS -DmyDS.jdbcDriver='com.mysql.jdbc.Driver'"
JAVA_OPTS="$JAVA_OPTS -DmyDS.jdbcUrl='jdbc:mysql://ahost/adb'"
JAVA_OPTS="$JAVA_OPTS -DmyDS.userName='auser'"
JAVA_OPTS="$JAVA_OPTS -DmyDS.password='apass'"
JAVA_OPTS="$JAVA_OPTS -DmyDS.maxActive=5"
JAVA_OPTS="$JAVA_OPTS -DmyDS.maxIdle=5"
JAVA_OPTS="$JAVA_OPTS -DmyDS.minIdle=1"
JAVA_OPTS="$JAVA_OPTS -DmyDS.initialSize=1"

由于堆栈跟踪还包含 jdbcUrl 的值,我很确定 TomEE 正确处理了这些值,似乎选择了错误的驱动程序 (HSQL)

mysql-connector JAR 在 $TOMEE_BASE/lib 中。将数据源定义放入 tomee.xml 是可行的。

【问题讨论】:

【参考方案1】:

不确定您的外壳,但我会删除简单的引号。此外,即使不太重要的 tomee 倾向于使用以大写开头的属性,即使它们中的大多数都不区分大小写。

【讨论】:

【参考方案2】:

事实证明,原因是类加载器冲突。 MySQL 连接器同时在 WAR(偶然)和 TomEE 中。从 WAR 中删除驱动程序后,一切开始工作。

仍然很奇怪,它在没有进一步通知某些驱动程序问题的情况下回退到 HSQLDB。

【讨论】:

以上是关于获取 SQLException:当使用系统属性定义资源时,Driver:org.hsqldb.jdbcDriver 为 tomee 中的 URL 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Python 获取类属性

获取 java.sql.SQLException:插入表时列索引无效

ManyToMany 属性的 SELECT 上的 JPQL Hibernate SQLException

获取 java.sql.SQLException:ResultSet 关闭后不允许操作

获取产品自定义属性以在 WooCommerce 产品循环中显示它们

java.sql.SQLException: ORA-01000: 超出打开游标的最大数