精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-07
voff12 写道 还是得看源代码,以求彻底解决此问题。
如果c3p0起作用的话: tomcat起动后,打开浏览页后,可以看到设定的5个最小5个连接数(MySQL Adminstator观察)出现。 而且可以用Jprofire检测到c3p0包的使用情况: 。 当用户增加多时,数据库最大的连接数增到20后,连接数不再增加。 写一个测试用的页面,每秒刷新N次。。。 之后再看。。。内存。。。 如果还长。。。那就是缓存的问题了。。。 如果不长。。。再看代码也来的急。。。。代码想要看一遍会死人的。 |
|
返回顶楼 | |
发表时间:2007-06-07
tonyyl 写道 hibernate.connection.provider_class=C3p0ConnectionProvider,这样就该行了
谢谢,不过还是不行。谢谢抛出。 不知道c3p0是不是在中间。spring的位置在那里?datasource的位置在那里? hibernate--> c3p0 -->jdbc spring --> hibernate -->c3p0 -->jdbc? |
|
返回顶楼 | |
发表时间:2007-07-04
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass"> <value>com.mysql.jdbc.Driver</value> </property> <property name="jdbcUrl"> <value>jdbc:mysql://localhost/auction</value> </property> <property name="user"> <value>root</value> </property> <property name="password"> <value>123456</value> </property> <property name="maxPoolSize"> <value>40</value> </property> <property name="minPoolSize"> <value>1</value> </property> <property name="initialPoolSize"> <value>1</value> </property> <property name="maxIdleTime"> <value>20</value> </property> </bean> <!--定义了Hibernate的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource"/> </property> <property name="mappingResources"> <list> <value>AuctionUser.hbm.xml</value> <value>Bid.hbm.xml</value> <value>Item.hbm.xml</value> <value>Kind.hbm.xml</value> <value>State.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.jdbc.batch_size">20</prop> </props> </property> </bean> |
|
返回顶楼 | |
发表时间:2007-07-04
没有问题
|
|
返回顶楼 | |
发表时间:2007-09-04
个人认为c3p0本身可能存在一定的问题,
我的应用有时候会抛出一个 java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. |
|
返回顶楼 | |
发表时间:2007-09-10
# public ArrayList showblog(int firstRow,int maxRow,int caid,String bauthor){ # List list=new ArrayList(); # # Session session = getHibernateTemplate().getSessionFactory().openSession(); # Query query =session.createQuery("from Blog where cateid='"+caid+"' and bauthor ='"+bauthor+"' order by blogid desc"); # query.setFirstResult(firstRow); # query.setMaxResults(maxRow); # list=query.list(); # session.flush(); # session.close(); # return (ArrayList) list; # } # 有可能是这段代码的问题。这种直接取出session然后执行的代码在关闭连接方面好像有问题。你把你的代码替换成getHibernateTemplate().XXX()这样,使用Template的方法来实现。看看连接数是否还会有问题。(你原本的连接池配置没有多大问题) 我最近也有过这种问题,最开始是 Criteria criteria = getSession().createCriteria(getPersistentClass()) .add(Example.create(exampleInstance)); try { Map<Object, Object> propertyMap; propertyMap = BeanUtils.describe(exampleInstance); if (propertyMap.containsKey("id") && propertyMap.get("id") != null) { criteria.add(Expression.idEq(new Integer((String)propertyMap.get("id")))); } } catch (Exception e) { logger.error("describe bean Exception : ", e); } int totalCount = (Integer) criteria.setProjection( Projections.rowCount()).uniqueResult(); criteria.setProjection(null); if (totalCount < 1) { return new Page(); } int startIndex = Page.getStartOfPage(pageNo, pageSize); List list = criteria.setFirstResult(startIndex).setMaxResults(pageSize) .list(); 出现跟你一样的问题,后来换成了 DetachedCriteria criteria = DetachedCriteria.forClass( getPersistentClass()).add(Example.create(exampleInstance)); try { Map<Object, Object> propertyMap; propertyMap = BeanUtils.describe(exampleInstance); if (propertyMap.containsKey("id") && propertyMap.get("id") != null) { criteria.add(Expression.idEq(new Integer((String) propertyMap .get("id")))); } } catch (Exception e) { logger.error("describe bean Exception : ", e); } int totalCount = (Integer) getHibernateTemplate().findByCriteria( criteria.setProjection(Projections.rowCount())).get(0); criteria.setProjection(null); if (totalCount < 1) { return new Page(); } int startIndex = Page.getStartOfPage(pageNo, pageSize); List list = getHibernateTemplate().findByCriteria(criteria,startIndex,pageSize); 问题解决。 最后附上我的连接池配置 <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${jdbc.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url}</value> </property> <property name="user"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> <property name="initialPoolSize"> <value>${c3p0.initialPoolSize}</value> </property> <property name="minPoolSize"> <value>${c3p0.minPoolSize}</value> </property> <property name="maxPoolSize"> <value>${c3p0.maxPoolSize}</value> </property> <property name="acquireIncrement"> <value>${c3p0.acquireIncrement}</value> </property> <property name="maxIdleTime"> <value>${c3p0.maxIdleTime}</value> </property> <property name="idleConnectionTestPeriod"> <value>${c3p0.idleConnectionTestPeriod}</value> </property> <property name="maxStatements"> <value>${c3p0.maxStatements}</value> </property> <property name="checkoutTimeout"> <value>${c3p0.checkoutTimeout}</value> </property> <property name="acquireRetryAttempts"> <value>${c3p0.acquireRetryAttempts}</value> </property> <property name="breakAfterAcquireFailure"> <value>${c3p0.breakAfterAcquireFailure}</value> </property> <property name="autoCommitOnClose"> <value>${c3p0.autoCommitOnClose}</value> </property> <property name="testConnectionOnCheckout"> <value>${c3p0.testConnectionOnCheckout}</value> </property> </bean> <bean id="sessionFactory" name="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="DataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> ${hibernate.dialect} </prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop> <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> </props> </property> <property name="mappingResources"> <list> <value>Role.hbm.xml</value> </list> </property> </bean> |
|
返回顶楼 | |
发表时间:2007-09-12
<property name="maxStatements">100</property> ,这个属性有什么用?直接去掉好了……
然后尝试一下把<prop key="hibernate.c3p0.idle_test_period">120</prop>属性设置小一些,例如30,让更短的时间检查空连接,以便释放。 <prop key="hibernate.c3p0.acquire_increment">2</prop>,值可否设置大一些? |
|
返回顶楼 | |
发表时间:2007-09-12
问一下用过c3p0的同志:
这个c3p0连接池在运行中,如果和数据库的网络连接断开过几分钟恢复连接,这个连接池是否还可以正常工作。如果可以正常工作,那么多长时间后就不能正常运行了,可以设定吗? |
|
返回顶楼 | |
发表时间:2007-09-13
zhaosong 写道 问一下用过c3p0的同志:
这个c3p0连接池在运行中,如果和数据库的网络连接断开过几分钟恢复连接,这个连接池是否还可以正常工作。如果可以正常工作,那么多长时间后就不能正常运行了,可以设定吗? 可以正常使用的,但是正在执行的事务会被终止,并抛出一个异常…… |
|
返回顶楼 | |
发表时间:2007-09-14
谢谢tom.duan
检测连接是否可用,是直接发送一个简单数据库请求来检测的,还是有什么更好的方法吗? 另外有推荐的连接池的 ---优秀的数据库连接分配机制--- 吗? 我看了一下c3p0的代码,因为层次太复杂,时间比较少所以没看出具体算法,希望能同过少量代码反映优秀连接分配算法的。不胜感激!!!(以前写的一个不太理想) |
|
返回顶楼 | |