Java 8升级后,DriverManager无法返回连接

时间:2019-04-17 14:26:08

标签: spring jdbc java-8

我有一个尝试连接到Impala和Oracle的应用程序。下面是定义的2个bean。

Impala驱动程序-ImpalaJDBC41-2.5.41.jar Oracle驱动程序-ojdbc6.jar

<bean id="ID1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.cloudera.impala.jdbc41.Driver"/>

<property name="url" value="jdbc:impala://impalahost:21050/;AuthMech=1;KrbRealm=myrealm;KrbServicName=impala;KrbHostFQDN=xxx" />

</bean>

<bean id="ID2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//oraclehost:1523/DB" />
<property name="username" value="myuser" />
<property name="password" value="pwd" />
<property name="connectionProperties">
<props>
<prop key="defaultRowPrefetch">5000</prop>
</props>
</property>
</bean>

在获取带有bean引用-ID2的“ Oracle”连接时,获取了此异常(令人惊讶的是,它涉及cloudera驱动程序代码)-

==java.lang.NullPointerException
===Stack trace...
java.util.Hashtable.put(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.copyProperties(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.connect(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
DriverManager(DriverManagerDataSource.java:173) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
Driver(DriverManagerDataSource.java:164) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119) org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)

相同的配置在Java 1.7中可以正常工作

1 个答案:

答案 0 :(得分:0)

在加载Oracle驱动程序之前加载Impala驱动程序时会发生此问题;因为在ojdbc6.jar(字母顺序)之前引用了ImpalaJDBC41-2.5.41.jar。因此,我有2个选项可以首先加载Oracle驱动程序,并且都可以正常工作-

  1. 将Impala jar重命名为ZImpala,以便在ojdbc jar之后被引用

  2. 但是“更干净,更好”的方法是通过在Jboss standalone.xml内将其配置为JDBC数据源,从而将Oracle驱动程序与自定义模块一起加载。