【发布时间】:2021-05-18 16:44:22
【问题描述】:
我的应用程序有两个石英作业,同时从 Oracle DB 读取两个不同的表。 我正在尝试使用带有 Hibernate 和 Oracle 的 c3p0 从池中获取连接。当 Tomcat 7 启动时,似乎 C3P0 已初始化:
2021-02-15 18:47:26,271 [信息] Hibernate EntityManager 3.2.1.GA
2021-02-15 18:47:26,290 [INFO] Hibernate Annotations 3.2.1.GA
2021-02-15 18:47:26,299 [INFO] Hibernate 3.2.6
...
2021-02-15 18:47:27,473 [INFO] 初始化 c3p0-0.9.1 [建于 2007 年 1 月 16 日 14:46:42;调试?真的;跟踪:10]
2021-02-15 18:47:27,621 [信息] 正在初始化 c3p0 池... com.mchange.v2.c3p0.PoolBackedDataSource@add8f7b3 [ 连接池数据源 -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@e6d03554 [ acquireIncrement -> 1,acquireRetryAttempts -> 30,acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, ... ]2021-02-15 18:47:28,240 [INFO] RDBMS:Oracle,版本:Oracle 数据库 11g 发布 11.1.0.0.0 - 生产
2021-02-15 18:47:28,241 [INFO] JDBC驱动:Oracle JDBC驱动,版本:10.2.0.4.0
2021-02-15 18:47:28,280 [INFO] 使用方言: org.hibernate.dialect.Oracle10gDialect
但是几行之后还是显示Hibernate内置连接池,不知道是不是应该这样? :
2021-02-15 18:47:37,726 [INFO] 使用 Hibernate 内置连接 池(不用于生产!)
2021-02-15 18:47:37,726 [INFO] Hibernate 连接池大小:20
无论如何,第一个作业成功从 Oracle DB 获取数据后,第二个作业无法从池中获取连接,因为它已关闭:
2021-02-15 18:48:38,923 [警告] SQL 错误:0,SQLState:空
2021-02-15 18:48:38,923 [错误] com.mchange.v2.c3p0.PoolBackedDataSource@add8f7b3 [连接池数据源-> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@e6d03554 [ acquireIncrement -> 1,acquireRetryAttempts -> 30,acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null,connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null,forceIgnoreUnresolvedTransactions -> false,identityToken -> 2zgg5baf1aa5t7d1frz5fs|700f6fc5,idleConnectionTestPeriod -> 3000, initialPoolSize -> 10, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0,maxIdleTime -> 300, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 10, 嵌套数据源 -> com.mchange.v2.c3p0.DriverManagerDataSource@2f7ccb64 [描述-> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 2zgg5baf1aa5t7d1frz5fs|6a16a596, jdbcUrl -> jdbc:oracle:thin:@10.129.12.158:1520:orcl, 属性 -> {user=, 密码=, autocommit=true, release_mode=auto} ], 首选测试查询-> null,propertyCycle-> 0, testConnectionOnCheckin -> 假,testConnectionOnCheckout -> 假, unreturnedConnectionTimeout -> 0,使用TraditionalReflectiveProxies -> 错误的; userOverrides: {} ],dataSourceName -> null, factoryClassLocation -> null,identityToken -> 2zgg5baf1aa5t7d1frz5fs|63308385, numHelperThreads -> 3 ] 已经 closed() -- 你不能再使用它了。
2021-02-15 18:48:38,923 [DEBUG] [docadmin] ccmwsWebQuartz::GenerateDocumentTypeOfRequestJob.generateDocumentTypeOfRequest() - errororg.hibernate.exception.GenericJDBCException:无法打开连接
2021-02-15 18:48:38,923 [DEBUG] ccmwsWebQuartz::GenerateDocumentTypeOfRequestJob.generateRequest():异常:org.hibernate.exception.GenericJDBCException:无法打开连接 1613411318923 毫秒。 javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法打开连接 在 org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629) 在 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73) 在 com.ct.contentintegration.scheduler.GenerateDocumentTypeOfRequestJob.generateDocumentTypeOfRequest(GenerateDocumentTypeOfRequestJob.java:165) 在 com.ct.contentintegration.scheduler.GenerateDocumentTypeOfRequestJob.generateRequest(GenerateDocumentTypeOfRequestJob.java:89) 在 com.ct.contentintegration.scheduler.GenerateDocumentTypeOfRequestScheduler.execute(GenerateDocumentTypeOfRequestScheduler.java:23) 在 org.quartz.core.JobRunShell.run(JobRunShell.java:202) 在 org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
原因:org.hibernate.exception.GenericJDBCException:无法打开连接
配置文件如下所示:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="jpaCcmwsWebJob">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- RAZVOJ -->
<properties>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@10.129.12.158:1520:orcl" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
<property name="hibernate.connection.password" value="docadmin2010" />
<property name="hibernate.connection.username" value="docadmin" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.min_size" value="10" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
</properties>
</persistence-unit>
</persistence>
Oracle 连接类型是基本。
任何想法我做错了什么?
【问题讨论】:
标签: java oracle hibernate c3p0