﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-云自无心水自闲-随笔分类-iBatis</title><link>http://www.blogjava.net/usherlight/category/31459.html</link><description>天平山上白云泉，云自无心水自闲。何必奔冲山下去，更添波浪向人间！</description><language>zh-cn</language><lastBuildDate>Tue, 13 May 2008 03:39:33 GMT</lastBuildDate><pubDate>Tue, 13 May 2008 03:39:33 GMT</pubDate><ttl>60</ttl><item><title>iBatis使用mysql，数据库超时自动关闭问题的解决</title><link>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Tue, 13 May 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/200164.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/200164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/200164.html</trackback:ping><description><![CDATA[iBatis自己带了一个simple的数据库连接池，基本的功能都有。但是在处理部分数据库（比如mysql）的连接空闲时间太长（mysql是8小时）自动超时的时候，就比不上象c3p0这样的连接池软件了（c3p0能自动处理数据库连接被关闭的情况)。<br id="oaq02" />
我目前采用的方法是iBatis本身提供的一种算得上是取巧的办法，基本思想就是每隔一段时间往数据库发一条查询语句，这样使得数据库空闲时间不会太长，而使得其自动关闭。<br id="oaq03" />
方法是在SqlMapConfig.xml的dataSource进行如下配置：<br id="oaq04" />
&lt;dataSource type="SIMPLE"&gt;<br id="oaq05" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Driver" value="${jdbc.driverClassName}"/&gt;<br id="oaq06" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.ConnectionURL" value="${jdbc.url}"/&gt;<br id="oaq07" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Username" value="${jdbc.username}"/&gt;<br id="oaq08" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Password" value="${jdbc.password}"/&gt;<br id="oaq09" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingEnabled" value="true"/&gt;<br id="oaq010" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingQuery" value="select 1"/&gt;<br id="oaq011" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingConnectionsOlderThan" value="0"/&gt;<br id="oaq012" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingConnectionsNotUsedFor" value="3600000"/&gt; <br id="oaq013" />
&lt;/dataSource&gt;<br id="oaq014" />
开始的３行是关于数据库连接信息的，不需要说明了。<br id="oaq015" />
Pool.PingEnabled：是用于设置开启是否允许检测连接状态<br id="oaq016" />
Pool.PingQuery：是用于检测连接的查询语名，当然是越简单越好<br id="oaq017" />
Pool.PingConnectionOlderThan：对持续连接时间超过设定值（毫秒）的连接进行检测，我将其设置为０（不进行此项检测），否则，iBatis在超过这个时间后，执行每个sql以前检测连接，对于性能可能会有一定的影响。<br id="oaq018" />
Pool.PingConnectionsNotUsedFor：对空闲超过设定值（毫秒）的连接进行检测，我设置为1小时（mysql缺省的关闭时间是8小时)<br id="j_7.0" />
<br id="j_7.1" />
当然，还有一个办法是使用c3p0这样的连接池<br id="j_7.2" />
但是需要自己写一部分代码，实现以下接口：
<pre id="j_7.3" style="margin: 0em;">public interface DataSourceFactory {<br id="j_7.4" />
public void initialize(Map map);<br id="j_7.5" />
public DataSource getDataSource();<br id="j_7.6" />
}</pre><img src ="http://www.blogjava.net/usherlight/aggbug/200164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2008-05-13 11:08 <a href="http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>