<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Becomin&#039; Charles &#187; java</title>
	<atom:link href="http://sexywp.com/tags/java/feed" rel="self" type="application/rss+xml" />
	<link>http://sexywp.com</link>
	<description>Building another myself~~</description>
	<lastBuildDate>Fri, 27 Jan 2012 16:00:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>在Hibernate里配置Proxool连接池</title>
		<link>http://sexywp.com/configure-connection-pool-with-hibernate.htm</link>
		<comments>http://sexywp.com/configure-connection-pool-with-hibernate.htm#comments</comments>
		<pubDate>Tue, 14 Jul 2009 07:22:37 +0000</pubDate>
		<dc:creator>Charles</dc:creator>
				<category><![CDATA[工作相关]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://sexywp.com/configure-connection-pool-with-hibernate.htm</guid>
		<description><![CDATA[在网上搜出了很多给Hibernate配置连接池的文章，不过基本上都是同一篇文章，介绍了3种连接池的配置方法，我先试验了c3p0，感觉不出有什么快的，只是觉得在并发测试中，减少了出错的概率。那篇帖子最底下，说道社区普遍认为c3p0不够优秀，大家更倾向使用proxool，于是乎，我决定也试试，当然，我自己完全是没任何经验的，纯粹是为了试试。

去proxool下载了最新版本，0.9.1（我用的Hibernate是3.2.5版本，实际上0.9.1配置好后，跑步起来，最后还是用了0.8.3，后面会说的），按照网上普遍能搜到的帖子里的那个方法配置。

<span class="readmore"><a href="http://sexywp.com/configure-connection-pool-with-hibernate.htm" title="在Hibernate里配置Proxool连接池">Keep Reading --- 913 words totally</a></span><table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Java的开源XML工具包dom4j" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/06/01/10587680.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Java的开源XML工具包dom4j</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何让Java程序定时运行" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/23/9225479.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何让Java程序定时运行</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="不要使用PeekChar()判断EOF" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdonot-use-peekchar-detect-eof.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">不要使用PeekChar()判断EOF</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="关于在.net下使用OCX控件的问题" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-use-ocx.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">关于在.net下使用OCX控件的问题</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title=".net中如何只允许运行一个程序实例" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Frun-only-one-instance.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">.net中如何只允许运行一个程序实例</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>在网上搜出了很多给Hibernate配置连接池的文章，不过基本上都是同一篇文章，介绍了3种连接池的配置方法，我先试验了c3p0，感觉不出有什么快的，只是觉得在并发测试中，减少了出错的概率。那篇帖子最底下，说道社区普遍认为c3p0不够优秀，大家更倾向使用proxool，于是乎，我决定也试试，当然，我自己完全是没任何经验的，纯粹是为了试试。</p>
<p>去proxool下载了最新版本，0.9.1（我用的Hibernate是3.2.5版本，实际上0.9.1配置好后，跑步起来，最后还是用了0.8.3，后面会说的），按照网上普遍能搜到的帖子里的那个方法配置。</p>
<p> <span id="more-352"></span>
<p>在hibernate.cfg.xml中加入:</p>
<pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;hibernate.proxool.pool_alias&quot;</span><span style="color: #0000ff">&gt;</span>pool1<span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;hibernate.proxool.xml&quot;</span><span style="color: #0000ff">&gt;</span>proxoolconf.xml<span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;hibernate.connection.provider_class&quot;</span><span style="color: #0000ff">&gt;</span>org.hibernate.connection.ProxoolConnectionProvider<span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span></pre>
<p>然后，再在classpath下面放一个proxoolconf.xml的配置文件，里面的内容为：</p>
<pre><span style="color: #0000ff">&lt;?</span>xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;<span style="color: #0000ff">?&gt;</span>
<span style="color: #008000">&lt;!-- the proxool configuration can be embedded within your own application's.
Anything outside the &quot;proxool&quot; tag is ignored. --&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">something</span>-<span style="color: #ff0000">else</span>-<span style="color: #ff0000">entirely</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span>pool1<span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!--proxool只能管理由自己产生的连接--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">driver</span>-<span style="color: #ff0000">url</span><span style="color: #0000ff">&gt;</span>jdbc:mysql://localhost:3306/struts?useUnicode=true&amp;characterEncoding=GBK<span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver</span>-url<span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">driver</span>-<span style="color: #ff0000">class</span><span style="color: #0000ff">&gt;</span>org.gjt.mm.mysql.Driver<span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver</span>-class<span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">driver</span>-<span style="color: #ff0000">properties</span><span style="color: #0000ff">&gt;</span>
            <span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;user&quot;</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">&quot;root&quot;</span><span style="color: #0000ff">/&gt;</span>
            <span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;password&quot;</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">&quot;8888&quot;</span><span style="color: #0000ff">/&gt;</span>
        <span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver</span>-properties<span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">house</span>-<span style="color: #ff0000">keeping</span>-<span style="color: #ff0000">sleep</span>-<span style="color: #ff0000">time</span><span style="color: #0000ff">&gt;</span>90000<span style="color: #0000ff">&lt;/</span><span style="color: #800000">house</span>-keeping-sleep-time<span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">maximum</span>-<span style="color: #ff0000">new</span>-<span style="color: #ff0000">connections</span><span style="color: #0000ff">&gt;</span>20<span style="color: #0000ff">&lt;/</span><span style="color: #800000">maximum</span>-new-connections<span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!-- 最少保持的空闲连接数--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">prototype</span>-<span style="color: #ff0000">count</span><span style="color: #0000ff">&gt;</span>5<span style="color: #0000ff">&lt;/</span><span style="color: #800000">prototype</span>-count<span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!-- 允许最大连接数,超过了这个连接，再有请求时，就排在队列中等候，最大的等待请求数由maximum-new-connections决定--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">maximum</span>-<span style="color: #ff0000">connection</span>-<span style="color: #ff0000">count</span><span style="color: #0000ff">&gt;</span>100<span style="color: #0000ff">&lt;/</span><span style="color: #800000">maximum</span>-connection-count<span style="color: #0000ff">&gt;</span>
<span style="color: #008000">&lt;!-- 最小连接数--&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">minimum</span>-<span style="color: #ff0000">connection</span>-<span style="color: #ff0000">count</span><span style="color: #0000ff">&gt;</span>10<span style="color: #0000ff">&lt;/</span><span style="color: #800000">minimum</span>-connection-count<span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">something</span>-else-entirely<span style="color: #0000ff">&gt;</span> </pre>
<p>如果人品好，到这里应该就没有别的事情要做了，就是把proxool-0.9.1.jar放到你的classpath中就OK了，可惜事情偏偏不会那么顺利。</p>
<p>这样子搞，会出现一个错误：</p>
<p>org.hibernate.HibernateException: Proxool Provider unable to load JAXP configurator file: proxool.xml<br />
  <br />org.logicalcobwebs.proxool.ProxoolException: Parsing failed.</p>
<p>于互联网上疯狂搜索，找了很多的说法，过滤了无数信息，终于发现一个哥们儿说的招儿有效：</p>
<p><strong><span style="color:#ff0000">将proxoolconf.xml里面的中文删除即可。</span></strong>汗死！~~~</p>
<p>以为到这里消停了吧，一启动服务器，又出错了：</p>
<p><a href="http://sexywp.com/tags/java" class="st_tag internal_tag" rel="tag" title="标签 java 下的日志">java</a>.lang.ClassNotFoundException: org.logicalcobwebs.cglib.proxy.Callback</p>
<p>然后我在proxool的代码里找了半天，竟然没有这个类，到网上搜索依赖的jar包，发现这个类在proxool-0.8.3.jar中才包含，于是乎只好再换过去。</p>
<p>看来，最新的东西是不能用的啊……另外，我以一个实例说明了，使用Java开发项目是多么的麻烦，选用Hibernate作为持久层，你还要考虑配备什么连接池，然后连接池有好多种，每种的性能，使用方法不一样，选定一种后，你还面临着版本兼容问题。这么小一个地方，就出了这么多麻烦，网上甚至看到一个哥们儿，写着，调试了5天了，还没有找到出错原因……唉……</p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Java的开源XML工具包dom4j" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/06/01/10587680.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Java的开源XML工具包dom4j</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何让Java程序定时运行" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/23/9225479.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何让Java程序定时运行</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="不要使用PeekChar()判断EOF" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdonot-use-peekchar-detect-eof.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">不要使用PeekChar()判断EOF</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="关于在.net下使用OCX控件的问题" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-use-ocx.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">关于在.net下使用OCX控件的问题</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title=".net中如何只允许运行一个程序实例" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Frun-only-one-instance.htm&from=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">.net中如何只允许运行一个程序实例</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
	标签：<a href="http://sexywp.com/tags/java" title="java" rel="tag">java</a>, <a href="http://sexywp.com/tags/programming" title="programming" rel="tag">programming</a><br />
]]></content:encoded>
			<wfw:commentRss>http://sexywp.com/configure-connection-pool-with-hibernate.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java的开源XML工具包dom4j</title>
		<link>http://sexywp.com/dom4j-xml-toolkit-java.htm</link>
		<comments>http://sexywp.com/dom4j-xml-toolkit-java.htm#comments</comments>
		<pubDate>Mon, 30 Mar 2009 16:12:59 +0000</pubDate>
		<dc:creator>Charles</dc:creator>
				<category><![CDATA[工作相关]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code examples]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://sexywp.com/?p=310</guid>
		<description><![CDATA[dom4j是一个使用简便的开源类库，专门用来在Java平台上处理XML，XPath和XSLT，该类库使用了Java Collections Framework，完全支持DOM，SAX和JAXP。

dom4j为一个XML文档在内存中创建了一个树对象模型。 它提供了一组强大易用的API，通过XPath和XSLT来处理、操纵或者遍历XML文件，此外其中还集成了SAX、JAXP和DOM。

为了提供高度可配置的实现策略，dom4j基于接口设计。只需要提供一个DocumentFactory实现，您就可以创建您自己的XML树实现。这种设计，使得在扩展dom4j以定制您需要的特性时，能非常简单地重用dom4j的代码。

本文档将通过代码实例的方式为您提供一个dom4j的实践指南。在实验室项目中，这个开源工具包给我的工作带来了很大的便利，在这篇文章中，我将对项目中用到dom4j完成的任务做个总结，以期和互联网上的众多文档能够互相补充。

<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何让Java程序定时运行" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/23/9225479.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何让Java程序定时运行</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="在Hibernate里配置Proxool连接池" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">在Hibernate里配置Proxool连接池</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Yii框架的Log系统的分析" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-use-log-in-yii-framework.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/22/9184865.jpg" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Yii框架的Log系统的分析</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="怎么觉得Python这么混乱呢" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fwhy-python-code-mess.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">怎么觉得Python这么混乱呢</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="天啊！Google Code中文版……" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fgoogle-code.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">天啊！Google Code中文版……</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p><img style="display: inline; margin-left: 0px; margin-right: 0px" alt="The hierarchy of the interfaces in dom4j libaray" src="http://lh6.ggpht.com/_QYicOeu89Bk/SafPc8W7V6I/AAAAAAAABJo/pe3JBdV_QJg/s400/dom4j-interface-hierarchy.png" align="left"></p>
<p><strong>dom4j</strong>是一个使用简便的开源类库，专门用来在Java平台上处理<abbr title="eXtensible Markup Language">XML</abbr>，<abbr title="XML Path Language">XPath</abbr>和<abbr title="eXtensible Stylesheet Language Transformation">XSLT</abbr>，该类库使用了Java Collections Framework，完全支持<abbr title="Document Object Model">DOM</abbr>，<abbr title="Simple API for XML">SAX</abbr>和<abbr title="Java API for XML Processing">JAXP</abbr>。</p>
<p><strong>dom4j</strong>为一个XML文档在内存中创建了一个树对象模型。 它提供了一组强大易用的API，通过XPath和XSLT来处理、操纵或者遍历XML文件，此外其中还集成了SAX、JAXP和DOM。</p>
<p>为了提供高度可配置的实现策略，<strong>dom4j</strong>基于接口设计。只需要提供一个DocumentFactory实现，您就可以创建您自己的XML树实现。这种设计，使得在扩展dom4j以定制您需要的特性时，能非常简单地重用dom4j的代码。</p>
<p>本文档将通过代码实例的方式为您提供一个dom4j的实践指南。在实验室项目中，这个开源工具包给我的工作带来了很大的便利，在这篇文章中，我将对项目中用到dom4j完成的任务做个总结，以期和互联网上的众多文档能够互相补充。</p>
</p>
<p><span id="more-310"></span>
</p>
<h3>读取XML文件</h3>
<p>一般性地读取XML文件，在dom4j中操作起来将非常简单。</p>
</p>
<pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> readXMLSimple(File file) <span style="color: #0000ff">throws</span> DocumentException{
    <span style="color: #008000">//使用SAXReader读取XML文件</span>
    SAXReader sr = <span style="color: #0000ff">new</span> SAXReader();
    Document doc = sr.read(file);

    <span style="color: #008000">//使用XPath遍历一个XML文件的结点</span>
    Element root = doc.getRootElement();
    List entryList1 = root.selectNodes("<span style="color: #8b0000">entry</span>");
    <span style="color: #008000">//或者</span>
    List entryList2 = doc.selectNodes("<span style="color: #8b0000">/feed/entry</span>");
}</pre>
<p>&nbsp;</p>
<h3>创建一个XML文档并记录到磁盘上</h3>
<p>创建一个XML文件，并将其写到磁盘上，也可以使用非常简介的代码来完成，假设我们将上一个代码范例中得到的entry节点的列表，插入到一个新建的XML文档中，然后使用优美的缩进格式保存在磁盘上，我们可以像下面这样编码：</p>
<pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> createXMLSimple(List entries, File f)
        <span style="color: #0000ff">throws</span> FileNotFoundException,
               UnsupportedEncodingException,
               IOException{
    Document doc = DocumentHelper.createDocument();
    doc.addElement("<span style="color: #8b0000">feed</span>");
    Element root = doc.getRootElement();
    Iterator i = entries.iterator();
    <span style="color: #0000ff">while</span>(i.hasNext()){
       <span style="color: #008000">//从别的Dom中得到的Element都有其本身</span>
        <span style="color: #008000">//的root，所以必须创建副本才能插入另一个doc内</span>
        root.add(((Element)i.next()).createCopy());
    }
    FileOutputStream os = <span style="color: #0000ff">new</span> FileOutputStream(f);
    OutputFormat of = OutputFormat.createPrettyPrint();
    XMLWriter xmlw = <span style="color: #0000ff">new</span> XMLWriter(os,of);
    xmlw.write(doc);
}</pre>
<p>&nbsp;</p>
<h3>读取一个根节点带有默认Namespace的XML</h3>
<p>如果我们刚才的代码范例读取的是符合Atom1.0标准的Feed，那么，根节点带有default namespace的http://www.w3.org/2005/Atom。读取这样的XML文档稍微有点麻烦，网上的代码很多，但是很多都不好用，我总结下来，基本上没有办法像你想的那么干净。</p>
<pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> treatDefaultNamespace(File f)
        <span style="color: #0000ff">throws</span> DocumentException{
    SAXReader sr = <span style="color: #0000ff">new</span> SAXReader();
    Map ns = <span style="color: #0000ff">new</span> HashMap();
    ns.put("<span style="color: #8b0000">atom</span>", "<span style="color: #8b0000">http://www.w3.org/2005/Atom</span>");
    sr.getDocumentFactory().setXPathNamespaceURIs(ns);
    <span style="color: #008000">//Element接口支持迭代器，在这里顺便展示一下</span>
    Element root = sr.read(f).getRootElement();
    Iterator i = root.elementIterator();
    <span style="color: #0000ff">while</span>(i.hasNext()){
        Element e = (Element) i.next();
        <span style="color: #008000">//一旦指定了Namespace，则使用XPath的时候必须带上</span>
         <span style="color: #008000">//即便是默认的Namespace也一样，不过前面那个名字</span>
         <span style="color: #008000">//可以尽可能写得短，编码的时候方便，比如改成a</span>
        String title = e.selectSingleNode("<span style="color: #8b0000">atom:title</span>").getText();
        System.out.println(title);
    }
}</pre>
<p>&nbsp;</p>
<h3>创建一个根节点带有默认Namespace的XML</h3>
<p>创建一个带有default namespace的XML的方法，相当的tricky，因为你创建一个Element的方法有很多种，可以通过add方法，默认的建，也可以使用DocumentHelper对象来创建，不过，每种方法给你的结果都不同，往往让你大吃一惊。其他的那些方法，和得到的多种结果，大家可以在网上看，很多。我就提供一个能创建“干净”的XML的代码范例。</p>
<pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> createXMLWithDefaultNamespace(List entries){
    Document d = DocumentHelper.createDocument();
    d.addElement("<span style="color: #8b0000">feed</span>","<span style="color: #8b0000">http://www.w3.org/2005/Atom</span>");
    Element root = d.getRootElement();
    <span style="color: #008000">//省略迭代entries代码</span>
    root.addElement("<span style="color: #8b0000">title</span>").add(DocumentHelper.createCDATA(title));
    root.addElement("<span style="color: #8b0000">id</span>").add(DocumentHelper.createText(guid));
    root.addElement("<span style="color: #8b0000">category</span>").add(DocumentHelper.createText(category));
    root.addElement("<span style="color: #8b0000">link</span>").add(DocumentHelper.createText(permalink));
    root.addElement("<span style="color: #8b0000">updated</span>").add(DocumentHelper.createText(updated));
}</pre>
<p>&nbsp;</p>
<p>最后，罗列一下上文中用到的所有对象所在的包，没有列出的在J2SE内。</p>
<pre><span style="color: #0000ff">import</span> org.dom4j.Document;
<span style="color: #0000ff">import</span> org.dom4j.DocumentException;
<span style="color: #0000ff">import</span> org.dom4j.DocumentHelper;
<span style="color: #0000ff">import</span> org.dom4j.Element;
<span style="color: #0000ff">import</span> org.dom4j.io.OutputFormat;
<span style="color: #0000ff">import</span> org.dom4j.io.SAXReader;
<span style="color: #0000ff">import</span> org.dom4j.io.XMLWriter;</pre>
<h3>参考文章</h3>
<p>IBM Developer Works: <a href="http://www.ibm.com/developerworks/cn/xml/x-dom4j.html">使用 dom4j 解析 XML—使用 domj4 API 创建与修改 XML 文档</a></p>
<p><a href="http://www.dom4j.org/">dom4j官方网站</a></p>
<p><a href="http://www.dom4j.org/dom4j-1.6.1/apidocs/">dom4j的javadoc文档</a></p>
<p><a href="http://zhangjiansheng.blogspot.com/2007/11/dom4jnamespace.html">dom4j两种创建namespace的方法的差异! 07-11-30</a></p>
<p>dom4j Cookbook</p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何让Java程序定时运行" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/23/9225479.png" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何让Java程序定时运行</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="在Hibernate里配置Proxool连接池" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">在Hibernate里配置Proxool连接池</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Yii框架的Log系统的分析" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fhow-to-use-log-in-yii-framework.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/site_images/2011/05/22/9184865.jpg" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Yii框架的Log系统的分析</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="怎么觉得Python这么混乱呢" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fwhy-python-code-mess.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">怎么觉得Python这么混乱呢</font>
                    </a>
                </td>
                <td width="86" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="天啊！Google Code中文版……" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fgoogle-code.htm&from=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 80px !important; height: 80px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="80px" height="80px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 86px !important; font: 12px/15px arial !important; height: 45px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">天啊！Google Code中文版……</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
	标签：<a href="http://sexywp.com/tags/code" title="code" rel="tag">code</a>, <a href="http://sexywp.com/tags/code-examples" title="code examples" rel="tag">code examples</a>, <a href="http://sexywp.com/tags/java" title="java" rel="tag">java</a>, <a href="http://sexywp.com/tags/tools" title="tools" rel="tag">tools</a><br />
]]></content:encoded>
			<wfw:commentRss>http://sexywp.com/dom4j-xml-toolkit-java.htm/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>如何让Java程序定时运行</title>
		<link>http://sexywp.com/how-to-make-java-task-scheduled-excecute.htm</link>
		<comments>http://sexywp.com/how-to-make-java-task-scheduled-excecute.htm#comments</comments>
		<pubDate>Mon, 23 Feb 2009 15:13:59 +0000</pubDate>
		<dc:creator>Charles</dc:creator>
				<category><![CDATA[工作相关]]></category>
		<category><![CDATA[excecute]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://sexywp.com/?p=302</guid>
		<description><![CDATA[由于项目开发的需要，必须实现让一个Java程序定时运行。比如，我的项目中，有一个网络蜘蛛，需要从互联网上抓取数据，与其配合，有另一个程序来对新抓取的页面进行索引的创建，由于数据源更新频率不高，我们不可能让蜘蛛无休无止地工作，或者忙等待新数据的产生，那样只能造成浪费，而且非常地不礼貌，所以最理想的情况是，让它每隔一个小时运行一次，这样一天也就运行不了几次。

那么如何才能实现让一个Java程序定时运行呢？Java基本类库里面，提供了两个工具供我们使用，它们是java.util.Timer和java.util.TimerTask。

<span class="readmore"><a href="http://sexywp.com/how-to-make-java-task-scheduled-excecute.htm" title="如何让Java程序定时运行">Keep Reading --- 626 words totally</a></span><table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Java的开源XML工具包dom4j</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">在Hibernate里配置Proxool连接池</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Frun-only-one-instance.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">.net中如何只允许运行一个程序实例</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Flinux-commands-used-when-working.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">工作中常用的Linux命令集锦</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fir%25E5%2585%25A5%25E9%2597%25A8%25E6%2591%2598%25E6%258A%2584.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">IR入门摘抄</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p><img src="http://lh6.ggpht.com/_QYicOeu89Bk/SaK8o7J0S2I/AAAAAAAABHw/wvBb9HFkEcw/s400/Timer.png" alt="Timer and TimerTask class diagram" style="float:left;margin-right:15px;margin-bottom:10px"/></p>
<p>由于项目开发的需要，必须实现让一个Java程序定时运行。比如，我的项目中，有一个网络蜘蛛，需要从互联网上抓取数据，与其配合，有另一个程序来对新抓取的页面进行索引的创建，由于数据源更新频率不高，我们不可能让蜘蛛无休无止地工作，或者忙等待新数据的产生，那样只能造成浪费，而且非常地不礼貌，所以最理想的情况是，让它每隔一个小时运行一次，这样一天也就运行不了几次。<span id="more-302"></span></p>
<p>那么如何才能实现让一个Java程序定时运行呢？Java基本类库里面，提供了两个工具供我们使用，它们是java.util.Timer和java.util.TimerTask。</p>
<p>Timer是一个对象，这个对象在初始化之初，会创建一个后台进程（TimerThread），同时创建一个任务队列（TaskQueue），然后后台进程开始检测TaskQueue中是否存在等待调度的任务，如果存在，就运行之，如果不存在，就等待（Object.wait()）。</p>
<p>对于程序员可见的类是Timer和TimerTask，TimerTask是一个抽象类，是能够被Timer所调度的一种对象，所有希望定时执行的任务，只要实现TimerTask类即可，然后使用Timer的schedule方法，给定一定的参数，即可实现定时执行，或者周期执行。</p>
<p>schedule方法的本质，是将一个TimerTask对象添加到了TaskQueue中，这个TaskQueue是一个堆（可以动态增长），可以管理很多的Task。</p>
<p>Timer的本质，就是一个线程，按照指定的时间顺序，来顺次执行一个又一个的任务，根据这种性质，我们可以知道，Timer实现的定时不可能准确，而且，还会收到任务本身耗费时间的干扰。如果前一个任务执行时间过长，超过后一个任务的启动时间，则后一个任务的启动时间必然要顺延。所以，这种方法，只能用于，任务短小，且对时间精度要求不高的语境。</p>
<p>Timer是线程安全的，可以实现并发访问。</p>
<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fdom4j-xml-toolkit-java.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">Java的开源XML工具包dom4j</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fconfigure-connection-pool-with-hibernate.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">在Hibernate里配置Proxool连接池</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Frun-only-one-instance.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">.net中如何只允许运行一个程序实例</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Flinux-commands-used-when-working.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">工作中常用的Linux命令集锦</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fsexywp.com%2Fir%25E5%2585%25A5%25E9%2597%25A8%25E6%2591%2598%25E6%258A%2584.htm&from=http%3A%2F%2Fsexywp.com%2Fhow-to-make-java-task-scheduled-excecute.htm">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">IR入门摘抄</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>
	标签：<a href="http://sexywp.com/tags/excecute" title="excecute" rel="tag">excecute</a>, <a href="http://sexywp.com/tags/java" title="java" rel="tag">java</a>, <a href="http://sexywp.com/tags/schedule" title="schedule" rel="tag">schedule</a>, <a href="http://sexywp.com/tags/thread" title="thread" rel="tag">thread</a><br />
]]></content:encoded>
			<wfw:commentRss>http://sexywp.com/how-to-make-java-task-scheduled-excecute.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

