SegmentFault c3p0的问题2020-06-29T10:26:17+08:00https://segmentfault.com/feeds/tag/c3p0https://creativecommons.org/licenses/by-nc-nd/4.0/SSH项目中隔天访问的JDBC rollback failedhttps://segmentfault.com/q/10100000230427522020-06-29T10:26:17+08:002020-06-29T10:26:17+08:00liangxu1212https://segmentfault.com/u/liangxu12120
<p>RT,在我隔天尝试登录SSH web项目时,总会发生JDBC rollback failed的问题,log如图,按照网上各种线索(修改连接池、配置)均未能够解决,不知道是我的配置文件有问题(附在题尾)还是说应该换一个连接池呢?<br><img src="/img/bVbIQCg" alt="error1.png" title="error1.png"><br><img src="/img/bVbIQCk" alt="error2.png" title="error2.png"><img src="/img/bVbIQCu" alt="error3.png" title="error3.png"><br>配置文件如下</p>
<pre><code><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@ip:ORCL" />
<property name="user" value="user" />
<property name="password" value="passwd" />
</bean>
<bean id="nativeJdbcExtractor" lazy-init="true"
class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
<bean id="lobHandler" lazy-init="false"
class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor" />
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="lobHandler" ref="lobHandler" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.max_fetch_depth">0</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="cglib.use_reflection_optimizer">false</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.c3p0.min_size">8</prop>
<prop key="hibernate.c3p0.max_size">200</prop>
<prop key="hibernate.c3p0.timeout">600</prop>
<prop key="hibernate.c3p0.max_statements">0</prop>
<prop key="hibernate.c3p0.idle_test_period">60</prop>
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<prop key="hibernate.c3p0.validate">true</prop>
</props>
</property>
<property name="mappingResources">
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<aop:aspectj-autoproxy proxy-target-class="true" />
<tx:annotation-driven transaction-manager="transactionManager" />
</beans></code></pre>
[帮忙]c3p0:JDBC驱动程序,在Web应用程序停止时无法取消注册。为了防止内存泄漏,JDBC驱动程序已被强制注销。https://segmentfault.com/q/10100000146649152018-04-29T13:49:46+08:002018-04-29T13:49:46+08:00宣华https://segmentfault.com/u/suxxx0
<p>使用JDBCDataSouce 正常,启动停止都正常,不报错。<br>当切换到C3P0<br><img src="/img/bV9Haw?w=1550&h=323" alt="clipboard.png" title="clipboard.png"></p>
<p>C3P0 XML 中的配置:</p>
<pre><code><!-- 然后再在连接池配置中引用-->
<bean id="dataSource_c3p0_properties"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
</code></pre>
<p>谁能帮我决解以下当前遇到的这个问题,启动的时候没事,每次关闭的时候都报这个警告,<br>才疏学浅,不知道怎么决解,网上资料说要取消注册,但那都是JAVA方案,<br>mybatis 不知道怎么通过配置方式决解,请有能力的帮助我以下,谢谢。</p>
c3p0连接池释放资源后, 访问数据库还是越来越慢?https://segmentfault.com/q/10100000124088232017-12-13T15:26:40+08:002017-12-13T15:26:40+08:00SmNiuhehttps://segmentfault.com/u/smniuhe0
<p>1.<img src="/img/bV0eeH?w=1174&h=292" alt="clipboard.png" title="clipboard.png"></p>
<p><img src="/img/bV0ee7?w=1284&h=838" alt="clipboard.png" title="clipboard.png"></p>
<p>2.这种方式默认因该是操作完,默认释放来资源的把!看来下源码,但是还是觉得会越来越慢,有时候数据库直接断开连接来,c3p0的配置都是默认配置</p>
<p>3.和下面这种方式有什么不同,这个因该是手动释放</p>
<p><img src="/img/bV0eiS?w=1294&h=356" alt="clipboard.png" title="clipboard.png"></p>
dbutils和c3p0如何带条件分页模糊查询?https://segmentfault.com/q/10100000114827062017-10-09T23:26:23+08:002017-10-09T23:26:23+08:00周全https://segmentfault.com/u/zhouquan_59db92a898cd50<p><img src="/img/bVWlj5?w=1353&h=717" alt="这个是我写的dao层实现层查询语句" title="这个是我写的dao层实现层查询语句"><br><img src="/img/bVWlkf?w=1167&h=201" alt="service实现层" title="service实现层"><br><img src="/img/bVWlkn?w=1388&h=462" alt="Jsp页面" title="Jsp页面"><br><img src="/img/bVWlkm?w=1105&h=486" alt="servlet处理" title="servlet处理"><br><img src="/img/bVWlkO?w=1389&h=352" alt="报错了!" title="报错了!"><br>希望有人可以帮忙解答,很着急</p>hibernate报Communications link failurehttps://segmentfault.com/q/10100000103892082017-07-28T09:59:49+08:002017-07-28T09:59:49+08:00galaxy_21https://segmentfault.com/u/galaxy_210
<h4>hiberate偶尔会报错Communications link failure,并出现以下错误</h4>
<pre><code>[WARN ] 2017-07-28 09:48:12,876 org.hibernate.util.JDBCExceptionReporter SQL Error: 0, SQLState: 08S01
[ERROR] 2017-07-28 09:48:12,879 org.hibernate.util.JDBCExceptionReporter Communications link failure
The last packet successfully received from the server was 51,384 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
org.hibernate.exception.JDBCConnectionException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
at sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:345)
at com.sun.proxy.$Proxy46.beginTransaction(Unknown Source)
at com.bwton.info.usermanager.dao.UserDAO.queryByMainKey(UserDAO.java:45)
at com.bwton.info.usermanager.service.PhoneService.authByPwd(PhoneService.java:105)
at com.bwton.info.usermanager.servlet.Auth.doPost(Auth.java:88)
at com.bwton.info.usermanager.servlet.Auth.doGet(Auth.java:41)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.bwton.info.usermanager.servlet.LoginFilter.doFilter(LoginFilter.java:95)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2486)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 51,384 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:988)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3552)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3452)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3893)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4842)
at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:1059)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:83)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 38 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3004)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3462)
... 47 more
</code></pre>
<h4>c3p0和hibernate配置如下</h4>
<pre><code><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/testdb?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.max_statements">10</property>
<property name="hibernate.c3p0.idle_test_period">100</property></code></pre>
<h4>mysql的TimeOut如下</h4>
<p><img src="/img/bVRKOY?w=415&h=253" alt="图片描述" title="图片描述"></p>
<p>wait_timeout远小于c3p0的idle_test_period,百度之后并没有发现相关的解决方法。</p>
c3p0进行jmx监控,tokenid问题https://segmentfault.com/q/10100000089088272017-03-31T17:55:10+08:002017-03-31T17:55:10+08:00Novahttps://segmentfault.com/u/netinn0
<p>用jmx监控c3p0,自定义数据源名称后,tokenid未改变;按照官网教程也未生效,c3p0版本0.9.5-pre10。<br><a href="https://link.segmentfault.com/?enc=5EKu4CCzoRUZRRikWbnCYw%3D%3D.hjLwYTlBnR9vB115lrhGC%2FmmH%2F5O0XP3QIqVWwwoECPNRsuSVTfwt1fFuA3c2mSQKTAY4icR7v7UOHwmUx%2F8Rnf7vL1p9o%2Bo%2FPyH4SzgY2k%3D" rel="nofollow">http://www.mchange.com/projec...</a></p>
<pre><code>c3p0.dataSourceName=APP
com.mchange.v2.c3p0.management.ExcludeIdentityToken=true
</code></pre>
<p>请问如何处理这个tokenid与DataSource的一致性问题呢?<br><img src="/img/bVLxJg?w=541&h=54" alt="配置" title="配置"></p>
<p><img src="/img/bVLxJq?w=1148&h=554" alt="tokenid变化" title="tokenid变化"></p>
使用c3p0时出现一个问题,使得项目老是挂掉、( ˇˍˇ )https://segmentfault.com/q/10100000078230282016-12-16T10:40:22+08:002016-12-16T10:40:22+08:00wait_zhinianhttps://segmentfault.com/u/wait_zn0
<p>框架是spring Struts2 mybatis <br>报错信息如下</p>
<p><img src="/img/bVGZht?w=1172&h=204" alt="clipboard.png" title="clipboard.png"></p>
<p>是配置的问题?可是同一套配置在多个不同的平台一起运行着啊,只有其中一个会挂掉、、、</p>
c3p0连接池异常https://segmentfault.com/q/10100000078733712016-12-21T11:22:29+08:002016-12-21T11:22:29+08:00Dylanhttps://segmentfault.com/u/open_mind0
<pre><code>2016-12-21 11:19:40 [ com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2:25683 ] - [ DEBUG ] An exception occurred while acquiring a poolable resource. Will retry.
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:524)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:493)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:262)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:223)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(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)
</code></pre>
<pre><code>c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://****:3306/****?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
c3p0.user=portal
c3p0.password=****
c3p0.maxPoolSize=5</code></pre>
<p>什么情况???<br> 求教</p>
c3p0连接池 异常https://segmentfault.com/q/10100000078738062016-12-21T11:47:22+08:002016-12-21T11:47:22+08:00Dylanhttps://segmentfault.com/u/open_mind0
<pre><code>java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at dao.DbConnect.getConByC3P0(DbConnect.java:18)
at dao.DbConnect.main(DbConnect.java:46)
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
... 3 more</code></pre>
<pre><code>c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://****:3306/mpaper_cms2?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
c3p0.user=portal
c3p0.password=portal
c3p0.initialPoolSize=5
c3p0.minPoolSize=5
c3p0.maxPoolSize=10</code></pre>
Incorrect syntax near the keyword 'SET'https://segmentfault.com/q/10100000075295012016-11-18T23:18:24+08:002016-11-18T23:18:24+08:00钰哲https://segmentfault.com/u/zhe_56d860e26925f0<p>用queryrunner实行update,对sqlserver数据库插入数据时报了Incorrect syntax near the keyword 'SET'错!搞不懂哪里有问题</p>c3p0一个数据源多用户问题https://segmentfault.com/q/10100000056926602016-06-11T23:55:42+08:002016-06-11T23:55:42+08:00mooner_guohttps://segmentfault.com/u/mooner_guo0<p>看源码发现有个C3P0PooledConnectionPoolManager,里面有个authToPools的Map成员属性,用来保存user信息-->pool的map。那么问题来了,当我<strong><em>初始化一个ComboPooledDataSource的时候,这个map只会放一个用户</em></strong>,那么我怎么来放多个用户呢?c3p0官方文档上好像没说到。<br>貌似初始化多个datasource的时候会用到倒戈Mananger,这2个数据源是隔离的。连接池管理也是隔离的。</p>连接池怎么配置合理?https://segmentfault.com/q/10100000040051582015-11-17T10:51:26+08:002015-11-17T10:51:26+08:00沁痕居士https://segmentfault.com/u/qinhen0<p>最近用java做一个P2P网站。用了hibernate和c3p0。我想知道,连接池的最大数最小数应该配置多少合适? 是否可以根据内存、CPU、以及数据库最大连接计算出来。 求一个比较合理的配置方式。 谢谢!</p>hibernate3 c3p0 struts2连接多个数据库时出现内存溢出https://segmentfault.com/q/10100000030051002015-07-20T18:06:22+08:002015-07-20T18:06:22+08:00zy__https://segmentfault.com/u/w___55acc2c96005a0
<p>目前有一个Web的后台管理系统,系统要连接在不同的Server中的Mysql数据库(数据库表结构都一样),连接池用的c3p0,系统提供切换不同Server的功能,系统在当前状态下只能操作一个Server中的数据。<br>
目前的做法是在内存中定义了一个静态Map对象来存储所有的SessionFactory(相当于每一个Server有一个SessionFactory),当系统做切换Server时进行初始化构建,如果已经构建过则直接取该对象。系统在部署后操作一段时间后就会出现内存错误:<strong>java.lang.OutOfMemoryError: Java heap space</strong>,</p>
<p>请问可能产生问题的原因是什么?这样操作不同Server中的数据库是否合理?</p>
从c3p0连接池取出连接后 设置autoCommit=false 使用完再放回后 属性还会继续生效嘛https://segmentfault.com/q/10100000029262292015-06-23T10:44:27+08:002015-06-23T10:44:27+08:00忒XXhttps://segmentfault.com/u/gese0
<p>从c3p0连接池取出连接后 设置autoCommit=false 使用完再放回后 属性还会继续生效嘛</p>
java spring c3p0 jdbc 连接数一直往上走,直到跑满,网站就打不开了,本地测试没问题https://segmentfault.com/q/10100000029302052015-06-24T15:28:19+08:002015-06-24T15:28:19+08:00kaipizhehttps://segmentfault.com/u/kaipizhe0
<p>用的是阿里云,刚买的,网站就我自己测试</p>
<p>db.properties</p>
<pre><code>nginx</code><code>jdbc.acquireIncrement=5
jdbc.initPoolSize=20
jdbc.minPoolSize=10
jdbc.maxPoolSize=600
jdbc.maxStatements=20
jdbc.maxStatementsPerConnection=5
jdbc.idleConnectionTestPeriod=60
</code></pre>
<p>applicationContext.xml</p>
<pre><code>xml</code><code> <!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置 C3P0 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="acquireIncrement" value="${jdbc.initPoolSize}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
<property name="maxStatements" value="${jdbc.maxStatements}"></property>
<!-- 每60秒检查所有连接池中的空闲连接.Default:0 -->
<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/>
<!--
<property name="maxStatementsPerConnection" value="${jdbc.maxStatementsPerConnection}"></property>
-->
</bean>
<!-- 配置 Spirng 的 JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置 bean -->
<!-- 配置 bean model 包 -->
</code></pre>
<p><img src="/img/bVmsro" alt="图片描述"></p>
<p><img src="/img/bVmsrp" alt="图片描述"></p>
java spring c3p0 jdbc 怎么循环插入几十次就挂了https://segmentfault.com/q/10100000021652672014-11-19T17:00:03+08:002014-11-19T17:00:03+08:00kaipizhehttps://segmentfault.com/u/kaipizhe0
<p>java spring c3p0 jdbc 怎么循环插入几十次就挂了<br>
是不是没释放连接</p>
<p>报错好像是连接过多,应该怎么处理</p>
<pre><code>package com.tuzuan.test.dao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tuzuan.dao.FileTuZuanDao;
import com.tuzuan.model.FileTuZuan;
public class FileTuZuanDaoImplTest {
private ApplicationContext ctx = null;
private FileTuZuanDao fileTuZuanDao;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
fileTuZuanDao = (FileTuZuanDao) ctx.getBean("fileTuZuanDao");
}
@Test
public void testSave() {
for (int i = 0; i < 1000; i++) {
FileTuZuan fileTuZuan = new FileTuZuan("jpg", "7fd8c3b7d493a53435e6f2a459b4a9e0", "a226e30887c65aa124939d5b1fdfcff3", 100, 500, "/file_tuzuan/2014/11/19", "jpg", "m_96e753bfb781000001ff20c498e0 - 副本 (4).jpg", 12541, 1416381592, 0);
int fileId = fileTuZuanDao.save(fileTuZuan);
System.out.println(fileId);
}
}
}
</code></pre>
<pre><code>警告: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@2c21ac2a -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at sun.reflect.GeneratedConstructorAccessor13.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1037)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
at sun.reflect.GeneratedConstructorAccessor11.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:195)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:184)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:200)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1086)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1073)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)
</code></pre>
java JDBC连接池c3p0的问题https://segmentfault.com/q/10100000024374702014-12-22T12:13:26+08:002014-12-22T12:13:26+08:00Eternalhttps://segmentfault.com/u/eternal0
<p>项目框架:<br>
java web项目框架为SSH框架,使用c3p0连接池,服务端为tomcat7+jdk1.8;<br>
问题描述:<br>
项目每次大概运行12个小时以后,会发现java thread报警too many,通过jstack发现大概1600+,并且还在不断的增加;<br>
通过日志发现有这样错误:</p>
<hr>
<pre><code>C3P0PooledConnectionPool destroyResource() calls are now protected by in-use resource locks to prevent rare deadlocks during simultaneous test / destroy.
</code></pre>
<hr>
<p>故障分析:<br>
myql的my.ini:</p>
<pre><code>wait_timeout=240
interactive_timeout=240
</code></pre>
<p>修改 C3P0 的配置文件,在 Spring 的配置文件中设置:</p>
<pre><code><property name="idleConnectionTestPeriod" value="120"/>
</code></pre>
<p>故障大概分析为数据库主动断开连接的时候, C3P0会释放这个连接, 但是有较小的几率, 在释放的时候同时会触发有效检查, 这时这个线程就被阻塞了, 一致等待, 连接对象释放不掉, 但数据库那边已经断开了;</p>
Spring与C3P0连接池死锁问题https://segmentfault.com/q/10100000006573132014-09-02T22:24:14+08:002014-09-02T22:24:14+08:00damaohttps://segmentfault.com/u/xiayutian0_00
<p>用过SPRING与C3P0的估计都遇到过这个问题吧,死锁报错如下:<br><img src="http://segmentfault.com/img/bVcU9X" alt="请输入图片描述"><br>
我之前遇到过,最后还是没解决。。。最后没用C3PO,网上有一篇文章讲这个死锁问题讲得很清楚,<a rel="nofollow" href="http://blog.sina.com.cn/s/blog_53923f940100g6as.html">http://blog.sina.com.cn/s/blog_53923f940100g6as.html</a>,不过没有提供解决方案,求交流啊</p>
关于spring mvc使用c3p0数据源的无响应问题https://segmentfault.com/q/10100000004676612014-04-14T08:40:13+08:002014-04-14T08:40:13+08:00chace0120https://segmentfault.com/u/chace01200
<pre><code>本期做了两个Web应用,都是使用的spring mvc,两个项目也各配置了自己的数据源——c3p0,两个应用之间使用rest服务通信。
在把两个应用都部署到服务器上的tomcat后,出现了问题。不定时地,随机某个应用的数据库操作会出现无响应的现象,一直在等待,产看tomcat日志,项目日志无果,最后没办法只能靠重启tomcat才能正常运行。
后来在c3p0的配置中发现有个属性checkoutTimeout,设置这个属性是当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后会抛出SQLException。默认为0,则无限等待。个人认为设置后起码出现上述的问题应该抛出异常吧。
但不明白的是为什么这两个应用运行在tomcat上会出现数据库连接的问题,推测出现一直等待的原因是应用获取不到数据库连接,所以一直在等待。
求解答。
</code></pre>