使用 Sniffy 指定的 Oracle URL 无效

Posted

技术标签:

【中文标题】使用 Sniffy 指定的 Oracle URL 无效【英文标题】:Invalid Oracle URL specified with Sniffy 【发布时间】:2016-08-04 07:55:49 【问题描述】:

我正在尝试将 Sniffy 配置为与 Oracle 一起使用。我使用 Glassfish 作为应用服务器,使用 JPA 2.0,并使用 EclipseLink 作为提供程序。

当 EclipseLink 尝试分配连接时,它失败说指定的 Oracle URL 无效,因为"sniffer:" 前缀,我猜:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed;
nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because:  Invalid Oracle URL specified
Error Code: 0

这就是我在 domain.xml 文件中配置池的方式:

<jdbc-resource pool-name="poolGI" object-type="system-all" jndi-name="jdbc/poolGI" />
<jdbc-connection-pool driver-classname="io.sniffy.MockDriver" name="poolGI" res-type="javax.sql.DataSource" datasource-classname="oracle.jdbc.pool.OracleDataSource">
    <property name="URL" value="sniffer:jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=service)))"></property>
    <property name="user" value="user"></property>
    <property name="password" value="password"></property>
</jdbc-connection-pool>

【问题讨论】:

“它说”?怎么说?发布该消息的 EXCEPTION + STACK TRACE,然后人们就知道它来自哪里! 堆栈跟踪确实提供了信息。 恐怕日志中就只有这些了 【参考方案1】:

Sniffy 开发者在这里。

看起来oracle.jdbc.pool.OracleDataSource 忽略了driver-classname 属性并隐式使用oracle.jdbc.driver.OracleDriver。 OracleDriver 不知道 sniffer: 架构,因此例外。

您需要切换到另一个数据源才能使用 Sniffy。 例如Hikari Connection Pool。

【讨论】:

以上是关于使用 Sniffy 指定的 Oracle URL 无效的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:指定的 Oracle URL 无效错误

SQLMap使用

如果使用 Oracle 钱包,正确的 JDBC URL 语法是啥?

为 Oracle JDBC 瘦客户端设置语言

使用 flyway 从 oracle 指定版本

oracle如何设置归档到指定路径不使用闪回区?