Java 8 升级后无法获得数据库连接
Unable to get db connection after Java 8 upgrade
我最近将应用程序从 java 1.7 升级到 1.8。其余库版本保持不变。升级后出现以下错误:
DEBUG 2015-11-12 09:55:12 BasicResourcePool An exception occurred while acquiring a poolable resource. Will retry.
java.lang.NullPointerException
at oracle.net.jndi.JndiAttrs.getAttrs(JndiAttrs.java:207)
at oracle.net.resolver.AddrResolution.<init>(AddrResolution.java:198)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:219)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
休眠配置:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@ldaps://XXXX,cn=OOOO,dc=WWW</property>
<property name="hibernate.connection.username">YYYY</property>
<property name="hibernate.statement_cache.size">0</property>
<property name="hibernate.connection.password">ZZZZZ</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.default_schema">YYYY</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
使用的相关库:
- ojdbc6 11.2.0.3.0
- 休眠 3.1
问题:
依赖项包含 2 个 hibernate 版本 3.1 和 3.0 以及 ojdbc6 和 ojdbc7。 (使用 mvn dependency:tree -Dverbose
获取依赖树)
解法:
从依赖项中排除了其他版本的 hibernate 和 ojdbc。
<dependency>
<groupId>****</groupId>
<artifactId>****</artifactId>
<version>****</version>
<exclusions>
<exclusion>
<groupId>hibernate</groupId>
<artifactId>hibernate</artifactId>
</exclusion>
<exclusion>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
</exclusion>
</exclusions>
</dependency>
从Oracle FAQ可以看出,您使用的jdbc 驱动程序与数据库版本和JDK8 不兼容。
What are the various supported Oracle database version vs JDBC compliant versions vs JDK version supported?
我想这一定是你的问题。也许如果你使用 ojdbc7.jar 可能会有帮助(不确定这个原因我还没有测试过 - 很可能这会失败)
我最近将应用程序从 java 1.7 升级到 1.8。其余库版本保持不变。升级后出现以下错误:
DEBUG 2015-11-12 09:55:12 BasicResourcePool An exception occurred while acquiring a poolable resource. Will retry.
java.lang.NullPointerException
at oracle.net.jndi.JndiAttrs.getAttrs(JndiAttrs.java:207)
at oracle.net.resolver.AddrResolution.<init>(AddrResolution.java:198)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:219)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
休眠配置:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@ldaps://XXXX,cn=OOOO,dc=WWW</property>
<property name="hibernate.connection.username">YYYY</property>
<property name="hibernate.statement_cache.size">0</property>
<property name="hibernate.connection.password">ZZZZZ</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.default_schema">YYYY</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
使用的相关库:
- ojdbc6 11.2.0.3.0
- 休眠 3.1
问题:
依赖项包含 2 个 hibernate 版本 3.1 和 3.0 以及 ojdbc6 和 ojdbc7。 (使用 mvn dependency:tree -Dverbose
获取依赖树)
解法: 从依赖项中排除了其他版本的 hibernate 和 ojdbc。
<dependency>
<groupId>****</groupId>
<artifactId>****</artifactId>
<version>****</version>
<exclusions>
<exclusion>
<groupId>hibernate</groupId>
<artifactId>hibernate</artifactId>
</exclusion>
<exclusion>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
</exclusion>
</exclusions>
</dependency>
从Oracle FAQ可以看出,您使用的jdbc 驱动程序与数据库版本和JDK8 不兼容。
What are the various supported Oracle database version vs JDBC compliant versions vs JDK version supported?
我想这一定是你的问题。也许如果你使用 ojdbc7.jar 可能会有帮助(不确定这个原因我还没有测试过 - 很可能这会失败)