求助,SSH,C3P0数据库连接一直涨。

问题描述

问题是这样的,前台界面查询数据,查看数据库,每查询一次,数据库连接就增加,感觉根本没从c3p0数据库连接池里面拿,每次操作都创建新的数据库连接,旧的连接也没释放,一直刷新界面,然后就报不能连接数据库的错误。cp3o配置如下:#----------datasource配置#最大的连接池大小datasource.maxPoolSize=50#最小的连接池大小datasource.minPoolSize=3#初始化连接池大小datasource.initialPoolSize=5#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0datasource.maxIdleTime=60#当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认:0datasource.checkoutTimeout=3000#当连接池中的连接耗尽的时候datasource一次同时获取的连接数。Default:3datasource.acquireIncrement=5#定义在从数据库获取新连接失败后重复尝试的次数。Default:30datasource.acquireRetryAttempts=0#两次连接中间隔时间,单位毫秒。Default:1000datasource.acquireRetryDelay=1000#连接关闭时默认将所有未提交的操作回滚。Default:falsedatasource.autoCommitOnClose=false#每60秒检查所有连接池中的空闲连接。默认值:0,不检查datasource.idleConnectionTestPeriod=60#测试连接有效性datasource.testConnectionOnCheckout=false#自动测试的table名称datasource.automaticTestTable=c3p0TestTable#c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值:0datasource.maxStatements=100datasource.maxStatementsPerConnection=0#方言(使用sqlserver数据库)hibernate.dialect=org.hibernate.dialect.OracleDialect#是否显示查询语句hibernate.show_sql=true#hibernate缓存对象hibernate.cache.class=org.hibernate.cache.EhCacheProvider#是否使用查询缓存hibernate.cache.query=turespring配置:<beanid="placeholderConfig"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="location"><value>classpath:com/config/init/init.properties</value></property></bean><!--c3p0连接池配置--><beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--用户名--><propertyname="user"value="${datasource.username}"/><!--用户密码--><propertyname="password"value="${datasource.password}"/><propertyname="driverClass"value="${datasource.driverClass}"/><propertyname="jdbcUrl"value="${datasource.url}"/><!--连接池中保留的最大连接数。默认值:15--><propertyname="maxPoolSize"value="${datasource.maxPoolSize}"/><!--连接池中保留的最小连接数,默认为:3--><propertyname="minPoolSize"value="${datasource.minPoolSize}"/><!--初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3--><propertyname="initialPoolSize"value="${datasource.initialPoolSize}"/><!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值:0--><propertyname="maxIdleTime"value="${datasource.maxIdleTime}"/><!--当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认:0--><propertyname="checkoutTimeout"value="${datasource.checkoutTimeout}"/><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值:3--><propertyname="acquireIncrement"value="${datasource.acquireIncrement}"/><!--定义在从数据库获取新连接失败后重复尝试的次数。默认值:30;小于等于0表示无限次--><propertyname="acquireRetryAttempts"value="${datasource.acquireRetryAttempts}"/><!--重新尝试的时间间隔,默认为:1000毫秒--><propertyname="acquireRetryDelay"value="${datasource.acquireRetryDelay}"/><!--每60秒检查所有连接池中的空闲连接。默认值:0,不检查--><propertyname="idleConnectionTestPeriod"value="${datasource.idleConnectionTestPeriod}"/><!--每60秒检查所有连接池中的空闲连接。默认值:0,不检查--><propertyname="testConnectionOnCheckout"value="${datasource.testConnectionOnCheckout}"/><propertyname="automaticTestTable"value="${datasource.automaticTestTable}"/><!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值:0--><propertyname="maxStatements"value="${datasource.maxStatements}"/><!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值:0--><propertyname="maxStatementsPerConnection"value="${datasource.maxStatementsPerConnection}"/></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">${hibernate.dialect}</prop><propkey="hibernate.show_sql">${hibernate.show_sql}</prop><propkey="hibernate.current_session_context_class">thread</prop></props></property><!----><!--主键Bean类--><!--<propertyname="annotatedClasses"><list><value>com.base.entity.BasUser</value></list></property>--><propertyname="packagesToScan"><list><value>com.base.entity</value></list></property><!--<propertyname="packagesToScan"value="com.base.dao"></property>--></bean><beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><propertyname="sessionFactory"ref="sessionFactory"></property></bean><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean><!--配置事务的传播特性--><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="*"propagation="REQUIRED"/><tx:methodname="save*"propagation="REQUIRED"/><tx:methodname="update*"propagation="REQUIRED"/><tx:methodname="delete*"propagation="REQUIRED"/><tx:methodname="*"read-only="false"/></tx:attributes></tx:advice><!--使用annotation自动注册bean(@Respository,@Component),并检查@Required,@Autowired的属性已被注入--><context:component-scanbase-package="com"/><!--那些类的哪些方法参与事务--><aop:config><aop:pointcutid="allServiceMethod"expression="execution(*com.*.service..*.*(..))"/><aop:advisorpointcut-ref="allServiceMethod"advice-ref="txAdvice"/></aop:config><!--使Spring关注Annotation--><context:annotation-config/>这个是dao,前台查询调用其中的查询方法publicclassBaseDaoImpextendsHibernateDaoSupport{@ResourcepublicvoidsetSessionFacotry(SessionFactorysessionFacotry){super.setSessionFactory(sessionFacotry);}publicSessiongetCurrentSession(){returnthis.getHibernateTemplate().getSessionFactory().getCurrentSession();}/***查询hql,返回list*/publicListlistHQLQuery(finalStringhql){returnthis.getHibernateTemplate().executeFind(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{if(null==hql||"".equals(hql)){returnnull;}Queryquery=session.createQuery(hql);returnquery.list();}});/*Sessionsession=this.getCurrentSession();session.beginTransaction();Listlist;try{list=session.createQuery(hql).list();}finally{session.getTransaction().commit();//session.close();}returnlist;*/}}查了很多资料说是session没关闭,但是,我用下面这个直接在代码里面commit,发现session是关掉了的,但是关掉了session,每次查询数据库还是增加了数据库连接。我怀疑我的dao代码写的有问题,麻烦大神帮我看看,困了好几天了。。。。。

解决方案

解决方案二:
用Myeclipse的Profile或者JProfile来监控一下!
解决方案三:
引用1楼littlebrain4solving的回复:

用Myeclipse的Profile或者JProfile来监控一下!

能具体点么。
解决方案四:
事务已经配置了spring的代理还打开什么事务肯定会爆掉的啊session.beginTransaction();这种的都去掉你的server里面的sacve*update_*那些都已经由spring代理了第二个就是就算你没用spring做事务代理你hibernate查询那也不需要打开事务查询根本就不需要事务
解决方案五:
引用3楼zcwgogo的回复:

事务已经配置了spring的代理还打开什么事务肯定会爆掉的啊session.beginTransaction();这种的都去掉你的server里面的sacve*update_*那些都已经由spring代理了第二个就是就算你没用spring做事务代理你hibernate查询那也不需要打开事务查询根本就不需要事务

那段是注释掉的,我用这段代码的时候,已经把spring的配置去掉了。我只是想试下提交事务是不是session就关了。
解决方案六:
上复制的这种代码都仔细看看原理要么复制过来有什么用,以后还是基于公司的框架来做,既然自己决定要搭建框架就要理解原理要么就不要做这事情就做coder就好了
解决方案七:
事务提交肯定是不会关闭链接的
解决方案八:
//session.close();---这个代码为啥会注释掉了?手动关一下session再看是否还是连接不关闭
解决方案九:
这种算是好的了。如果针对一个表既写又读,干脆就死锁了。还是别用spring为好,纯hibernate都不会出现那种情况。
解决方案十:
引用2楼weijiankuk的回复:

Quote: 引用1楼littlebrain4solving的回复:
用Myeclipse的Profile或者JProfile来监控一下!

能具体点么。

你现在目前搞不清楚哪里出现的问题,而且我们也只能猜测是连接上出现的问题;我建议你用监控工具看看情况,你通过监控器可以看到各个资源消耗的情况;这样利于你的判断。毕竟我们也不能完全通过你提供的这段内容得知具体情况。

时间: 2024-10-03 22:52:48

求助,SSH,C3P0数据库连接一直涨。的相关文章

datagridview-新人求助:c# 数据库连接

问题描述 新人求助:c# 数据库连接 建立了一个Windows窗体应用程序.在窗体中添加了一个dataGridView 控件.在添加数据源向导中在新建连接时,服务器名下拉框中没有可选项. 请老鸟指教! 解决方案 你确认你机器上有对应的数据库服务吗 解决方案二: 安装了SQL2008 服务已经启动了啊 解决方案三: 服务器名下拉框中没有可选项.你确定你的网络中有数据库服务器吗

来java树结构高手-求助ssh树结构代码来个大神

问题描述 求助ssh树结构代码来个大神 本人初学 求个树结构的代码 ssh平台 结合js做的 我写了jso js 但action老是写不对 dao service全弄好了

求助SSH上传下载代码

问题描述 求助SSH上传下载代码请问这个应该怎么写呢??最好有个项目啊! 解决方案 解决方案二:百度一下就好了.解决方案三:百度过了都是上传的没有下载的啊..............求教高手在线等!!解决方案四:struts2实现的文件上传与下载解决方案五:先下载commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar引用一下,给你看我写的一个用户上传头像,只能jpg,不然抛异常privateUseruser;privateUserServiceserv

C3p0数据库连接池的使用

1:首先介绍c3p0的一般使用用法,这种用法练习使用,当然工作的时候使用第二种xml配置完成c3p0的使用. c3p0的网址:http://www.mchange.com/projects/c3p0/ 1.1:第一种方式使用c3p0: 使用编码方式实现c3p0数据库连接池,练习学习使用的方式 1.1.1:创建数据库和数据表,省略. 1.1.2:引包,如下所示,因为需要连接数据库,所以必须加上mysql的驱动包 c3p0-0.9.1.2.jar mysql-connector-java-5.1.1

SSH项目数据库连接的问题

问题描述 项目用ssh整合的,连接池一直有问题,最开始用的dbcp连接池,数据库连接几天就把数据库的连接都给占光了,后面换了c3p0,结果还是不行An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: Attempted to use a closed or broken resource pool 解决方案 先谢谢题主私信我.这个问题我以前

spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服务器和数据库服务器应该是不在同一硬件上,这时候对数据库的连接.操作就和网络有了很大的关系,连接.操作数据库越多就越影响性能. 二是,数据库的数据持久化在硬件磁盘上,对数据库数据的操作就要进行磁盘的io读写操作,同样是操作越多就越容易影响性能. 而数据库连接池的作用是负责分配.管理和释放数据库连接,它

c3p0(数据库连接池)

获得 <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5</version> </dependency> 配置 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource

SSH整合学习笔记之spring与hibernate整合(二)--C3P0

SSH整合学习笔记 现在将之前的spring与hibernate整合修改一下,使用C3P0数据库连接池.基本的配置没有改变,只是增加了一个jdbc.properties文件和修改了applicationContext.xml和hibernate.cfg.xml文件的相关配置. jdbc.properties jdbcUrl= jdbc:mysql:///spring2hibernate driverClass = com.mysql.jdbc.Driver username = root pas

java-Java的框架SSH整合的项目,项目启动时总是会报一个莫名其妙的错误?

问题描述 Java的框架SSH整合的项目,项目启动时总是会报一个莫名其妙的错误? Unable to load configuration. - [unknown location] Caused by: Unable to load configuration. - [unknown location] Caused by: Unable to load jar:file:/D:/mars-workspace/.metadata/.plugins/org.eclipse.wst.server.