A. mysql连接池怎样使用事务自动回收
var mysql = require('mysql'), Connection = require('mysql/lib/Connection.js');var pool = mysql.createPool({ host: '127.0.0.1', database: 'myDB', port: 3306, user: 'root', password: 'root', debug: false, connectionLimit: 3});var execPool = function() { pool.getConnection(function(err, conn) { transAutoRelease(conn); conn.beginTransaction(function(err) { if (err) throw err; conn.query("INSERT INTO test(id,name,date,test) values(1,'123',now(),1)", function(err, ret) { if (err) { console.error(err); conn.rollback(function() {}); } else { console.log(ret); conn.query('UPDATE test set id=12321312 where id=1', function(err, ret) { if (err) { console.error(err); conn.rollback(function() { }); } else { conn.commit(function() { console.log('success' + JSON.stringify(ret)); }); } }); } }); }); });}function after(fn, cb) { return function() { fn.apply(this, arguments); cb(); }}function transAutoRelease(conn) { if (conn.commit == Connection.prototype.commit) conn.commit = after(conn.commit, release); if (conn.rollback == Connection.prototype.rollback) conn.rollback = after(conn.rollback, release); function release() { if (conn) { conn.release(); } }}var intervalStartProcess = function() { setInterval(function() { execPool(); }, 1000);}for (var i = 5 - 1; i >= 0; i--) { intervalStartProcess();}
B. proxool连接池回收连接问题。
你好,需要看你的销毁参数。close只是有连接关闭,放回连接池。需要参数houseKeepingSleepTime的定时去检查,检查到空闲的连接。通过maximumActiveTime连接最大活动时间,如果连接的活动大于这个数值,连接就会kill. 然后,连接不能是单例模式和单例模式的全局变量。数据源可以作为全局单例模式。
你可以从监控页面查看一下。
C. oracle 从连接池中取了连接一直未提交,连接会放回连接池吗
会的。连接会被oracle的机制 给回收掉。
D. asp.net网站 如果设置iis连接池强制回收,会不会影响网站计数器访问量变化,因为我们网站的访问量总是变化
这取决于你们的网站计数是放在哪里了,如果是放在数据库里或者写入在文件里,那没问题,如果你们把计数放在Cache或者Application里,那iis回收或者重启后计数就会重置。
E. 一般连接池是怎么处理mysql自动回收长时间
MYSQL不会回收,但会把长期不使用的连接断开,这个可以通过设置MYSQL的参数connect_timeout,wait_timeout来实现。
F. 连接池有那几种 分别有什么区别
在讲解连接池之前,先弄懂以下几个概念:
数据源:Data source , 读取数据的来源,也就是说你的系统要读取的数据去什么地方找(存放数据的地方)!
JDBC:全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。
两者之间的关系: 数据源并不等于连接池,数据源不是必须要求实现连接池的,即连接池是数据源的一种.
c3p0: hibernate.cfg.xml中配置
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration- 3.0.dtd">
<hibernate-configuration>
<session-factory >
<!--JDBC驱动程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的URL-->
<property name="connection.url"> jdbc:mysql://localhost:3306/application_context </property>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<!--连接的登录名--> <property name="connection.username">root</property>
<!--登录密码-->
<property name="connection.password">paul</property>
<!-- C3P0连接池设定-->
<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">5</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!--其它配置-->
……
</session-factory>
</hibernate-configuration>
dbcp: hibernate.cfg.xml中配置
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>
proxool: hibernate.cfg.xml中配置 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中) <?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<!--连接池的别名-->
<alias>DBPool</alias>
<!--proxool只能管理由自己产生的连接-->
<driver-url>jdbc:mysql://localhost:3306/application_context?useUnicode=true&characterEncoding=UTF8</driver-url>
<!?JDBC驱动程序-->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value=""/>
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空闲连接数-->
<prototype-count>5</prototype-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
<maximum-connection-count>100</maximum-connection-count> <!-- 最小连接数-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely> 配置hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate- configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">proxoolconf.xml</property>
</session-factory>
</hibernate-configuration>.JNDI: hibernate.cfg.xml中配置JNDI连接池,数据源已经由应用服务配置好(如Web服务器),Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如: hibernate.connection.datasource=java:/comp/env/jdbc/JNDI_NAME //JNDI名
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class=org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect
区别:在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现 dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高.
G. c#sql server 连接池多久释放
如果用ADO.NET封装好的 “连接”去访问, 那么当你执行.Close()时就会把这个连接放入GC,
如果不关闭连接,默认超时是3600秒,即1个小时后,该连接进入GC。
如果是连接池,那就是C#中实例化的一个对象, 实例会按照GC原则进行回收。就是当没有其他实例在调用连接池实例后的一段时间, GC自动进行回收。
H. Java中数据库连接池是如何做到,将Connection作为对象放入内存中不被回收机回收
纠正下你的说法.一个类是不会无缘无故运行的,所以谈不上占用内存,更没有回收.你问的应该是使用一个类创建了一个对象,如何回收该对象所占的内存空间?
例如有一个Person类,我们创建他的一个对象,一般是如下:
Person mPerson = new Person();
这个时候情况是,在栈内存中标记了一个名字叫mPerson的空间,它存储了一个关于某块内存区域位置的信息,说白了,就是你使用new Person();创建出来的对象的位置,我们称mPerson为Person对象的一个引用。这个对象位于堆内存,它是有默认值的,必须占内存一部分空间,想使用的时候,可以通过mPerson找到它。当你把mPerson赋值为null后,你那个对象就没有引用了,这个时候,你的JVM会在适当的时候自动去回收掉Person的对象。
I. 修改数据库上传替换后为什么要回收进程池
access数据库类似"嵌入式"的数据库,创建连接时是直接指定access文件。而asp.net默认是有连接池管理到数据库的连接的。
当你的access数据库上传之后,access文件被外部修改了。所以,在asp.net(或asp)中旧的连接失效了,这时如果使用连接池中旧的连接将会发生异常(连接的目标没了);而有时没有问题,则是连接时使用的并不是连接池中旧有的连接,而是连接池中重新分配的链接,能正常指向更新后的数据库文件,故不会发生异常。
在Access文件文件更新后,回收进程池将会同时回收数据库的连接池,从而保证了连接池中获取的都是新数据库文件的连接,这样不会有问题。
J. weblogic 如何进行连接回收
一、gc回收 web应用 → 连接池回收
weblogic jconnector Garbage Collector Method:(wls api)
WebLogic Server automatically detects connection leaks by leveraging its Java Virtual Machine
(JVM) garbage collector mechanism. When an application component terminates and the
connections it uses become dereferenced, the garbage collector calls the connection object’s
finalize() method.
When the garbage collector calls the finalize() method, if WebLogic Server determines the
application component has not closed the connection, the server automatically closes the
connection by calling the resource adapter’s ManagedConnection.cleanup() method;
WebLogic Server behaves as it would had it received a CONNECTION_CLOSED event upon proper
closure of the application component connection.
通过JVM垃圾回收机制,wls服务器能自发探测连接泄露,当应用终止而其所使用的连接变为孤儿时,
垃圾回收器就调用连接对象的finalize方法
垃圾回收器调用finalize方法时,如果wls服务器确定是应用没有关闭连接,
wls服务器将调用资源适配器的ManagedConnection的cleanup方法自动关闭连接,
weblogic服务器表现得就像它本来应该接收 应用组件连接的其中某个连接上的一个CONNECTION_CLOSED事件
二、程序显式回收 web应用→连接池
Connection.close()方法调用后,weblogic监控到该动作,由连接池回收并管理连接
三、weblogic的无效链接回收
inactive connection timeout 经过设定时间,回收无效链接
四、weblogic的连接池自动收缩
Allow Shrinking: 允许自动收缩。如果连接池的初始容量和最大容量不相等,那么当池中的连接大于初始容量时,经过Shrink Frequency时间,如果连接池中的活动连接不高于初始容量个,那么连接池中连接的数量会减少到初始容量大。