我正在使用postgresql + hibernate + c3p0进行池管理。
我可以看到,对于每个数据库查询,c3p0正在初始化,根据我的理解,这应该发生一次,而不是每个查询,否则有连接池的意义。如果我错了,请纠正。
相关信息:
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</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.c3p0.idle_test_period">1500</property>
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); //create session factory object
Session session = sessionFactory.openSession();
try{
String query = "SQL query here!!!";
list = session.createQuery(query).list();
}catch (HibernateException e){
System.out.println("Exception occured");
e.printStackTrace();
}
finally{
session.close();
sessionFactory.close();
}
ar 10,2016 12:45:13 org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 警告:HHH90000012:已识别的过时的hibernate命名空间http://hibernate.sourceforge.net/hibernate-configuration。请改用名称空间http://www.hibernate.org/dtd/hibernate-configuration。可以随时删除对过时的DTD / XSD命名空间的支持。 2016年3月10日上午12:45:13 org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator instantiateExplicitConnectionProvider 信息:HHH000130:实例化显式连接提供程序:org.hibernate.c3p0.internal.C3P0ConnectionProvider 2016年3月10日上午12:45:13 org.hibernate.c3p0.internal.C3P0ConnectionProvider configure 信息:HHH010002:C3P0使用驱动程序:org.postgresql.Driver在URL:jdbc:postgresql:// localhost:5432 / test 2016年3月10日上午12:45:13 org.hibernate.c3p0.internal.C3P0ConnectionProvider configure 信息:HHH10001001:连接属性:{user = postgres,password = ****} 2016年3月10日上午12:45:13 org.hibernate.c3p0.internal.C3P0ConnectionProvider configure 信息:HHH10001003:自动提交模式:false 2016年3月10日上午12:45:14 org.hibernate.c3p0.internal.C3P0ConnectionProvider configure 信息:HHH10001007:JDBC隔离级别: 2016年3月10日上午12:45:14 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager 信息:初始化c3p0池... com.mchange.v2.c3p0.PoolBackedDataSource@2b918bfb [connectionPoolDataSource - &gt; com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@e2340fd6 [acquireIncrement - &gt; 3,acquireRetryAttempts - &gt; 30,acquireRetryDelay - &gt; 1000,autoCommitOnClose - &gt; false,automaticTestTable - &gt; null,breakAfterAcquireFailure - &gt; false,checkoutTimeout - &gt; 0,connectionCustomizerClassName - &gt; null,connectionTesterClassName - &gt; com.mchange.v2.c3p0.impl.DefaultConnectionTester,debugUnreturnedConnectionStackTraces - &gt; false,factoryClassLocation - &gt; null,forceIgnoreUnresolvedTransactions - &gt; false,identityToken - &gt; 1hgf08x9fpqzsmd1pj0rtd | 571a34ba,idleConnectionTestPeriod - &gt; 500,initialPoolSize - &gt; 5,maxAdministrativeTaskTime - &gt; 0,maxConnectionAge - &gt; 0,maxIdleTime - &gt; 1800,maxIdleTimeExcessConnections - &gt; 0,maxPoolSize - &gt; 20,maxStatements - &gt; 0,maxStatementsPerConnection - &gt; 0,minPoolSize - &gt; 5,nestedDataSource - &gt; com.mchange.v2.c3p0.DriverManagerDataSource@7ee60818 [description - &gt; null,driverClass - &gt; null,factoryClassLocation - &gt; null,identityToken - &gt; 1hgf08x9fpqzsmd1pj0rtd | 70605aa2,jdbcUrl - &gt; jdbc:postgresql:// localhost:5432 / test,properties - &gt; {user = ******,password = ******}],preferredTestQuery - &gt; null,propertyCycle - &gt; 0,statementCacheNumDeferredCloseThreads - &gt; 0,testConnectionOnCheckin - &gt; false,testConnectionOnCheckout - &gt; false,unreturnedConnectionTimeout - &gt; 0,usesTraditionalReflectiveProxies - &gt;假; userOverrides:{}],dataSourceName - &gt; null,factoryClassLocation - &gt; null,identityToken - &gt; 1hgf08x9fpqzsmd1pj0rtd | 5f1ff580,numHelperThreads - &gt; 3]
答案 0 :(得分:0)
我没有看到完整的代码。但我相信下线 SessionFactory sessionFactory = new Configuration()。configure()。buildSessionFactory(); 将创建自己的游泳池。您可以将该行放在静态块中。
答案 1 :(得分:0)
c3p0将创建一个连接池并重新使用连接,因为完整的代码不存在,并且您提供的日志中没有任何内容表示重新初始化,我可以假设您没有重新使用SessionFactory。