??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
原因?hibernate 使用c3p0q接orcale数据后不?x)释?Q?c3p0的最大连接数?00Q但昄c3p0有BugQ导致数据库q接池不够用Q导致进E锁歅R?br />后换Proxool后,观察正常?br />
下面转引其它|友文章说明c3p0 ?Proxool?dbcp 的区?
<!-- JDBC驱动E序 -->
2<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 -->
3<property name="connection.username">root</property> <!-- 数据库密?nbsp;-->
上面的一D配|,?span class="hilite2" style="background-color: #ffffff">c3p0?span class="hilite1" style="background-color: #ffffff">dbcp中,都是必需的,因ؓ(f)hibernate?x)根据上q的配置来生成connectionsQ再交给c3p0?span class="hilite1" style="background-color: #ffffff">dbcp理.
1 C3P0
只需在hibernate.cfg.xml中加?
<property name="c3p0.min_size">5</property>
2<property name="c3p0.max_size">30</property>
3<property name="c3p0.time_out">1800</property>
4<property name="c3p0.max_statement">50</property>
5
q有在classespath中加?span class="hilite2" style="background-color: #ffffff">c3p0-0.8.4.5.jar
2 dbcp
在hibernate.cfg.xml中加?
<property name="dbcp.maxActive">100</property>
2<property name="dbcp.whenExhaustedAction">1</property>
3<property name="dbcp.maxWait">60000</property>
4<property name="dbcp.maxIdle">10</property>
5
6<property name="dbcp.ps.maxActive">100</property>
7<property name="dbcp.ps.whenExhaustedAction">1</property>
8<property name="dbcp.ps.maxWait">60000</property>
9<property name="dbcp.ps.maxIdle">10</property>
10
q有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.
3 proxool
׃数据库connection在较长时间没有访问下?x)自动断开q接Q导致浏览出错,增加proxool作ؓ(f)数据库pool。它有自动连接功能?br />1)、从http://proxool.sourceforge...下蝲proxoolQ释放proxool.jar到WEB-INF/lib
2)、在hibernate.cfg.xml中增加:(x)
<property name="hibernate.proxool.pool_alias">dbpool</property>
2<property name="hibernate.proxool.xml">proxool.xml</property>
3<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
4
3)、在与hibernate.cfg.xml同目录Qsrc根目录下Q增加proxool.xml文gQ?br />
<?xml version="1.0" encoding="utf-8"?>
2<!-- the proxool configuration can be embedded within your own application's.
3 Anything outside the "proxool" tag is ignored. -->
4<something-else-entirely>
5 <proxool>
6 <alias>dbpool</alias>
7 <!--proxool只能理p׃生的q接-->
8 <driver-url>
9 jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK&useUnicode=true&autoReconnect=true </driver-url>
10 <driver-class>com.mysql.jdbc.Driver</driver-class>
11 <driver-properties>
12 <property name="user" value="root" />
13 <property name="password" value="123456" />
14 </driver-properties>
15 <!-- proxool自动侦察各个q接状态的旉间隔(毫秒),侦察到空闲的q接马上回?时的销?/span>-->
16 <house-keeping-sleep-time>90000</house-keeping-sleep-time>
17 <!-- 最保持的I闲q接?/span>-->
18 <prototype-count>5</prototype-count>
19 <!-- 允许最大连接数,过?jin)这个连接,再有hӞ排在队列中{候,最大的{待h数由maximum-new-connections军_-->
20 <maximum-connection-count>100</maximum-connection-count>
21 <!-- 最连接数-->
22 <minimum-connection-count>10</minimum-connection-count>
23 </proxool>
24</something-else-entirely>
25
于在hibernate3.0中,已经不再支持dbcp?jin),hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp?BUG,在某些种情会(x)产生很多I接不能释放,所以抛弃了(jin)对dbcp的支持。至于c3p0Q有评论说它的算法不是最优的Q因为网上查资料得知Q有|友做了(jin)一个实验,在同一目中分别用?jin)几个常用的q接池,然后试其性能Q发现c3p0占用资源比较大,效率也不高。所以,Z上述原因Qproxool不少行家推荐使用Q而且暂时来说Q是负面评h(hun)是最的一个。在三星中也有项目是用proxool的。从性能和出错率来说QproxoolE微比前两种好些。C3P0Q稳定性似乎不错,在这斚wg有很好的口碑。至于性能Q应该不是最好的Q算是中规中矩的cd?
Proxool的口似乎很好,不大见到负面的评P从官方资料上来看Q有许多有用的特性和特点Q也是许多h推荐的?br />
]]>
]]>
]]><span id="spnTime"></span><script language="javascript">
var http = new XMLHttpRequest;
http.open("HEAD", ".", false);
http.send(null);
var curDate = new Date;
var offsetTime = curDate - Date.parse(http.getResponseHeader("Date"));
setInterval(function()
{
curDate.setTime(new Date - offsetTime);
document.getElementById("spnTime").innerHTML = curDate.toLocaleString();
}, 1000);
</script>
]]>
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
q里的scope是用来配置spring bean的作用域Q它标识bean的作用域?/p>
在spring2.0之前bean只有2U作用域卻I(x)singleton(单例)、non-singletonQ也UprototypeQ? Spring2.0以后Q增加了(jin)session、request、global session三种专用于Web应用E序上下文的Bean。因此,默认情况下Spring2.0现在有五U类型的Bean。当?dng)Spring2.0对Bean的类型的设计q行?jin)重构,q设计出灉|的Beancd支持Q理Z可以有无数多U类型的BeanQ用户可以根据自q需要,增加新的BeancdQ满_际应用需求?/p>
1、singleton作用?/p>
当一个bean的作用域讄为singleton, 那么Spring IOC容器中只?x)存在一个共享的bean实例Qƈ且所有对bean的请求,只要id与该bean定义相匹配,则只?x)返回bean的同一实例。换a之,当把一个bean定义讄为singleton作用域时QSpring IOC容器只会(x)创徏该bean定义的唯一实例。这个单一实例?x)被存储到单例缓存(singleton cacheQ中Qƈ且所有针对该bean的后l请求和引用都将q回被缓存的对象实例Q这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的Q单例设计模式表CZ个ClassLoader中只有一个class存在Q而这里的singleton则表CZ个容器对应一个beanQ也是说当一个bean被标识ؓ(f)singleton时候,spring的IOC容器中只?x)存在一个该bean?/p>
配置实例Q?/p>
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
或?/p>
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
2、prototype
prototype作用域部|的beanQ每一ơ请求(其注入到另一个bean中,或者以E序的方式调用容器的
getBean()
Ҏ(gu)Q都?x)生一个新的bean实例Q相当与一个new的操作,对于prototype作用域的beanQ有一炚w帔R要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配|、装饰或者是装配完一个prototype实例后,它交给客户端,随后对该prototype实例不闻不问?jin)。不何U作用域Q容器都?x)调用所有对象的初始化生命周期回调方法,而对prototype而言QQ何配|好的析构生命周期回调方法都不?x)被调用。清除prototype作用域的对象q放Q何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一U可行方式是Q通过使用bean的后|处理器Q该处理器持有要被清除的bean的引用。)(j)
配置实例Q?/p>
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
或?/p>
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>
3、request
request表示该针Ҏ(gu)一ơHTTPh都会(x)产生一个新的beanQ同时该bean仅在当前HTTP request内有效,配置实例Q?/p>
request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置Q?/p>
如果你用的是Servlet 2.4?qing)以上的web容器Q那么你仅需要在web应用的XML声明文gweb.xml中增加下qContextListener卛_Q?/p>
接着既可以配|bean的作用域?jin)?x)
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
4、session
session作用域表C针对每一ơHTTPh都会(x)产生一个新的beanQ同时该bean仅在当前HTTP session内有效,配置实例Q?/p>
配置实例Q?/p>
和request配置实例的前提一P配置好web启动文g可以如下配|:(x)
<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>
5、global session
global session作用域类g标准的HTTP Session作用域,不过它仅仅在Zportlet的web应用中才有意义。Portlet规范定义?jin)全局Session的概念,它被所有构成某个portlet web应用的各U不同的portlet所׃n。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中用global session作用域来标识beanQ那么web?x)自动当成sessioncd来用?/p>
配置实例Q?/p>
和request配置实例的前提一P配置好web启动文g可以如下配|:(x)
<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>
6、自定义bean装配作用?/p>
在spring2.0中作用域是可以Q意扩展的Q你可以自定义作用域Q甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototypeQ,spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自q作用域只要实现该接口卛_Q下面给个实例:(x)
我们建立一个线E的scopeQ该scope在表CZ个线E中有效Q代码如下:(x)