获取 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的主要内容,如果未能解决你的问题,请参考以下文章
获取 java.sql.SQLException:插入表时列索引无效
ManyToMany 属性的 SELECT 上的 JPQL Hibernate SQLException
获取 java.sql.SQLException:ResultSet 关闭后不允许操作