﻿<?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-java fans-随笔分类-J2EE</title><link>http://www.blogjava.net/jlin/category/54582.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 13 Dec 2018 20:57:37 GMT</lastBuildDate><pubDate>Thu, 13 Dec 2018 20:57:37 GMT</pubDate><ttl>60</ttl><item><title>记录一次kafka-manager1.3.3.18 Consumers is not display with kafka2.1.0 version</title><link>http://www.blogjava.net/jlin/archive/2018/12/13/433545.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 13 Dec 2018 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2018/12/13/433545.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/433545.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2018/12/13/433545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/433545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/433545.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;使用kafka 2.1.0 ,然后用最新的kafka-manager&nbsp;1.3.3.18来管理kafka, 然后写了一个生产者和消费者程序，程序运行后，死活显示不出来程序运行后，消费者的group死活显示不出来。生产者代码如下：package com.kafka.producer;import org.apache.commons.lang3.exception.Excepti...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2018/12/13/433545.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/433545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2018-12-13 15:36 <a href="http://www.blogjava.net/jlin/archive/2018/12/13/433545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>@RequestParam与@PathVariable的区别（转）</title><link>http://www.blogjava.net/jlin/archive/2018/08/22/433344.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 22 Aug 2018 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2018/08/22/433344.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/433344.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2018/08/22/433344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/433344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/433344.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">在<a title="Java EE知识库" href="http://lib.csdn.net/base/javaee" target="_blank" style="margin: 0px; padding: 0px; color: #000000;">spring</a>&nbsp;MVC中，两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的，区别在于，URL写法不同。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">使用@RequestParam时，URL是这样的：http://host:port/path?参数名=参数值<br style="margin: 0px; padding: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">使用@PathVariable时，URL是这样的：http://host:port/path/参数值<br style="margin: 0px; padding: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">例如：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">&nbsp;</p><div bg_java"="" style="word-break: break-word; background-color: #ffffff;"><div style="margin: 0px;"><div style="margin: 0px;"><strong style="margin: 0px; padding: 0px;">[java]</strong>&nbsp;<a title="view plain" href="http://blog.csdn.net/guge907/article/details/44923983#" target="_blank">view plain</a><span data-mod="popu_168" style="margin: 0px; padding: 0px;"><span data-mod="popu_168" style="margin: 0px; padding: 0px;">&nbsp;<a title="copy" href="http://blog.csdn.net/guge907/article/details/44923983#" target="_blank">copy</a></span></span><div style="margin: 0px;">&nbsp;</div></div></div><ol start="1" style="padding-left: 40px;"><li style="list-style-type: decimal; line-height: 1.6;">@RequestMapping(value="/user",method&nbsp;=&nbsp;RequestMethod.GET)&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;public&nbsp;@ResponseBody&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;User&nbsp;printUser(@RequestParam(value&nbsp;=&nbsp;"id",&nbsp;required&nbsp;=&nbsp;false,&nbsp;defaultValue&nbsp;=&nbsp;"0")&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;int&nbsp;id)&nbsp;{&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;userService.getUserById(id);&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;user;&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;@RequestMapping(value="/user/{id}",method&nbsp;=&nbsp;RequestMethod.GET)&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;public&nbsp;@ResponseBody&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;User&nbsp;printUser2(@PathVariable&nbsp;int&nbsp;id)&nbsp;{&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User();&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;userService.getUserById(id);&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;user;&nbsp;&nbsp;</li><li style="list-style-type: decimal; line-height: 1.6;">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li></ol></div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><br style="margin: 0px; padding: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">上面两个方法，访问路径分别如下：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><img src="http://img.blog.csdn.net/20150407183110261?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VnZTkwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 660px;" /><br style="margin: 0px; padding: 0px;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff;"><img src="http://img.blog.csdn.net/20150407183012061?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VnZTkwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 660px;" /></p><img src ="http://www.blogjava.net/jlin/aggbug/433344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2018-08-22 11:05 <a href="http://www.blogjava.net/jlin/archive/2018/08/22/433344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring3中js/css/jpg/gif等静态资源无法找到（No mapping found for HTTP request with URI）问题</title><link>http://www.blogjava.net/jlin/archive/2018/01/30/433031.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Tue, 30 Jan 2018 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2018/01/30/433031.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/433031.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2018/01/30/433031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/433031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/433031.html</trackback:ping><description><![CDATA[<p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">我们在使用spring3的时候，如果使用了注解的话，我们会发现，有时候我们界面的js/css/jpg/gif等文件会出现找不到的情况，然而检查引用路径，发现无论是绝对路径还是相对路径，都没错。这下我们就纠结了，到底是什么问题呢？</span></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">楼主我也是苦思良久，不经意间看到了后台的日志，才发现是spring搞的鬼。</span></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;"><br style="box-sizing: border-box;" /></span></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">报错信息：<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #ff0000;">&lt;No mapping found for HTTP request with URI [/sandDemo001/images/1.jpg] in DispatcherServlet with name 'spring'&gt;</span></span></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #ff0000;"><br style="box-sizing: border-box;" /></span></span></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #330033;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #ff0000; font-size: 18px;"><strong style="box-sizing: border-box;">解决方法1</strong></span>：<span style="box-sizing: border-box; margin: 0px; padding: 0px; font-size: 14px;"><strong style="box-sizing: border-box;">在spring的配置修改</strong></span></span><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #330033;">web.xml<span style="box-sizing: border-box; margin: 0px; padding: 0px; font-size: 14px;"><strong style="box-sizing: border-box;">下对</strong></span>spring<span style="box-sizing: border-box; margin: 0px; padding: 0px; font-size: 14px;"><strong style="box-sizing: border-box;">的</strong></span>DispatcherServlet<span style="box-sizing: border-box; margin: 0px; padding: 0px; font-size: 14px;"><strong style="box-sizing: border-box;">请求</strong></span>url<span style="box-sizing: border-box; margin: 0px; padding: 0px; font-size: 14px;"><strong style="box-sizing: border-box;">映射的配置，先来看看原配置</strong></span>：</span><br style="box-sizing: border-box;" /></span></span></span></p><div bg_html"="" style="box-sizing: border-box; position: relative; overflow-y: hidden; width: 851.391px; color: #454545;"><div style="box-sizing: border-box; margin: 0px;"><div style="box-sizing: border-box; margin: 0px; border-right: 1px solid #e7e5dc;"><strong style="box-sizing: border-box;">[html]</strong>&nbsp;<a href="http://blog.csdn.net/miss_kun/article/details/52047381#" title="view plain" style="box-sizing: border-box; background-image: url(&quot;../images/ico_plain.gif&quot;); background-position: left top; background-repeat: no-repeat; padding: 1px; outline: 0px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px;">view plain</a><span data-mod="popu_168" style="box-sizing: border-box; margin: 0px; padding: 0px;">&nbsp;<a href="http://blog.csdn.net/miss_kun/article/details/52047381#" title="copy" style="box-sizing: border-box; background-image: url(&quot;../images/ico_copy.gif&quot;); background-position: left top; background-repeat: no-repeat; padding: 1px; outline: 0px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px;">copy</a><div style="box-sizing: border-box; margin: 0px; position: absolute; left: 259px; top: 453px; width: 16px; height: 16px; z-index: 99;"></div></span></div></div><ol start="1" style="box-sizing: border-box; border-right: 1px solid #e7e5dc;"><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">spring</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-class</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">org.springframework.web.servlet.DispatcherServlet</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-class</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">load-on-startup</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">1</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">load-on-startup</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">spring</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li></ol></div><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #330033;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">&lt;servlet-mapping&gt;</span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">的</span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;">&lt;url-pattern&gt;/&lt;/url-pattern&gt;</span></span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #330033;">把所有的请求都交给spring去处理了，而所有available的请求url都是在Constroller里使用类似@RequestMapping(value = "/login/{user}", method = RequestMethod.GET)这样的注解配置的，这样的话对js/css/jpg/gif等静态资源的访问就会得不到。所以，在<span style="box-sizing: border-box; margin: 0px; padding: 0px;">web.xml里添加如下的配置就可以解决该问题了。</span></span></span></span><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #330033;"></span></span></span></span></span></span></p><div bg_html"="" style="box-sizing: border-box; position: relative; overflow-y: hidden; width: 851.391px; color: #454545;"><div style="box-sizing: border-box; margin: 0px;"><div style="box-sizing: border-box; margin: 0px; border-right: 1px solid #e7e5dc;"><strong style="box-sizing: border-box;">[html]</strong>&nbsp;<a href="http://blog.csdn.net/miss_kun/article/details/52047381#" title="view plain" style="box-sizing: border-box; background-image: url(&quot;../images/ico_plain.gif&quot;); background-position: left top; background-repeat: no-repeat; padding: 1px; outline: 0px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px;">view plain</a><span data-mod="popu_168" style="box-sizing: border-box; margin: 0px; padding: 0px;">&nbsp;<a href="http://blog.csdn.net/miss_kun/article/details/52047381#" title="copy" style="box-sizing: border-box; background-image: url(&quot;../images/ico_copy.gif&quot;); background-position: left top; background-repeat: no-repeat; padding: 1px; outline: 0px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px;">copy</a><div style="box-sizing: border-box; margin: 0px; position: absolute; left: 259px; top: 754px; width: 16px; height: 16px; z-index: 99;"></div></span></div></div><ol start="1" style="box-sizing: border-box; border-right: 1px solid #e7e5dc;"><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">default</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">*.css</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;</span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">default</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">*.gif</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">default</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">*.jpg</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">default</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-name</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">*.js</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">url-pattern</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li><li style="box-sizing: border-box; line-height: 18px;"><span style="box-sizing: border-box;">&nbsp;<span style="box-sizing: border-box; font-weight: 700; color: #993300;">&lt;/</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">servlet-mapping</span><span style="box-sizing: border-box; font-weight: 700; color: #993300;">&gt;</span><span style="box-sizing: border-box;">&nbsp;&nbsp;</span></span></li></ol></div><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 10px 0px; padding: 0px; color: #454545; background-color: #ffffff; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;"><strong style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-weight: 400; font-family: Arial; color: #ff0000; font-size: 18px;">解决方法2：<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000; font-size: 14px;">在spring的配置文件中添加如下一行：</span></span></strong></strong></p><p style="box-sizing: border-box; margin: 10px 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><strong style="box-sizing: border-box;"></strong><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #660000; font-size: 14px;"><strong style="box-sizing: border-box;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-weight: 400; color: #006699;">&lt;mvc:default-servlet-handler/&gt;</span></strong></span></p><p style="box-sizing: border-box; margin: 10px 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #660000; font-size: 14px;">注意，需要是spring3.0.5以上版本</span></p><br style="box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;" /><span style="box-sizing: border-box; margin: 0px; padding: 0px; background-color: #ffffff; color: #ff0000; font-family: Arial; font-size: 18px;"><strong style="box-sizing: border-box;">解决方法3：</strong></span><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; background-color: #ffffff; font-family: Arial;"><strong style="box-sizing: border-box;">在spring的配置文件中添加如下一行：</strong></span><br style="box-sizing: border-box; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;" /><p style="box-sizing: border-box; margin: 0px; padding: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: Arial; color: #330033;"></span></p><div style="box-sizing: border-box; margin: 0px; color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff; overflow: hidden;">&lt;!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --&gt;<br style="box-sizing: border-box;" />&nbsp;<br style="box-sizing: border-box;" />&nbsp;&lt;mvc:resources mapping="/resources/**" location="/resources/" /&gt;&nbsp;<br style="box-sizing: border-box;" />&nbsp;&nbsp;<br style="box-sizing: border-box;" />这个配置告诉spring 静态资源的处理方式<br /><br />转：&nbsp;<span style="font-family: verdana, &quot;courier new&quot;; font-size: 14px;">http://blog.csdn.net/miss_kun/article/details/52047381</span></div><div></div><img src ="http://www.blogjava.net/jlin/aggbug/433031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2018-01-30 16:16 <a href="http://www.blogjava.net/jlin/archive/2018/01/30/433031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一致性hash算法(JAVA)-转</title><link>http://www.blogjava.net/jlin/archive/2017/09/26/432831.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Mon, 25 Sep 2017 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2017/09/26/432831.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/432831.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2017/09/26/432831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/432831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/432831.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Java代码&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ConsistentHash&lt;T&gt;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;HashFunction&nbsp;hashFunction;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;numberOfReplicas;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;SortedMap&lt;Integer,&nbsp;T&gt;&nbsp;circle&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;TreeMap&lt;Integer,&nbsp;T&gt;();&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ConsistentHash(HashFunction&nbsp;hashFunction,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;numberOfReplicas,&nbsp;Collection&lt;T&gt;&nbsp;nodes)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;.hashFunction&nbsp;=&nbsp;hashFunction;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>&nbsp;.numberOfReplicas&nbsp;=&nbsp;numberOfReplicas;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(T&nbsp;node&nbsp;:&nbsp;nodes)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(node);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(T&nbsp;node)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;numberOfReplicas;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;circle&nbsp;.put(hashFunction&nbsp;.hash(node.toString()&nbsp;+&nbsp;i),&nbsp;node);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;remove(T&nbsp;node)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;numberOfReplicas;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;circle&nbsp;.remove(hashFunction&nbsp;.hash(node.toString()&nbsp;+&nbsp;i));&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;T&nbsp;get(Object&nbsp;key)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(circle&nbsp;.isEmpty())&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;hash&nbsp;=&nbsp;hashFunction&nbsp;.hash(key);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println("hash---:&nbsp;"&nbsp;+&nbsp;hash);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!circle&nbsp;.containsKey(hash))&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortedMap&lt;Integer,&nbsp;T&gt;&nbsp;tailMap&nbsp;=&nbsp;circle&nbsp;.tailMap(hash);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash&nbsp;=&nbsp;tailMap.isEmpty()&nbsp;?&nbsp;circle&nbsp;.firstKey()&nbsp;:&nbsp;tailMap.firstKey();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println("hash---:&nbsp;"&nbsp;+&nbsp;hash);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;circle&nbsp;.get(hash);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HashFunction&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;hash(Object&nbsp;key)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">md5加密后，hashcode</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Md5Encrypt.md5(key.toString()).hashCode();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String&nbsp;[]&nbsp;args)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashSet&lt;&nbsp;String&gt;&nbsp;set&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;HashSet&lt;&nbsp;String&gt;();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(&nbsp;"A"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(&nbsp;"B"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(&nbsp;"C"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(&nbsp;"D"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;&nbsp;String,&nbsp;Integer&gt;&nbsp;map&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;HashMap&lt;&nbsp;String,&nbsp;Integer&gt;();&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConsistentHash&lt;&nbsp;String&gt;&nbsp;consistentHash&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ConsistentHash&lt;String&gt;(&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;HashFunction(),&nbsp;1000,&nbsp;set);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count&nbsp;=&nbsp;10000;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;consistentHash.get(i);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(map.containsKey(key))&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;map.get(key)&nbsp;+&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println(key);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showServer(map);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.clear();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consistentHash.remove(&nbsp;"A"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.&nbsp;out&nbsp;.println("-------&nbsp;remove&nbsp;A"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;consistentHash.get(i);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(map.containsKey(key))&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;map.get(key)&nbsp;+&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println(key);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showServer(map);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.clear();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consistentHash.add(&nbsp;"E"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.&nbsp;out&nbsp;.println("-------&nbsp;add&nbsp;E"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;consistentHash.get(i);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(map.containsKey(key))&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;map.get(key)&nbsp;+&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println(key);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showServer(map);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.clear();&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consistentHash.add(&nbsp;"F"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.&nbsp;out&nbsp;.println("-------&nbsp;add&nbsp;F服务器&nbsp;&nbsp;业务量加倍"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;count&nbsp;*&nbsp;2;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;consistentHash.get(i);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(map.containsKey(key))&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;map.get(key)&nbsp;+&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(consistentHash.get(i),&nbsp;1);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;System.out.println(key);&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showServer(map);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;showServer(Map&lt;String&nbsp;,&nbsp;Integer&gt;&nbsp;map)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(Entry&lt;String,&nbsp;Integer&gt;&nbsp;m&nbsp;:&nbsp;map.entrySet())&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.&nbsp;out&nbsp;.println("服务器&nbsp;"&nbsp;+&nbsp;m.getKey()&nbsp;+&nbsp;"----"&nbsp;+&nbsp;m.getValue()&nbsp;+&nbsp;"个"&nbsp;);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />}&nbsp;</div><img src ="http://www.blogjava.net/jlin/aggbug/432831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2017-09-26 00:20 <a href="http://www.blogjava.net/jlin/archive/2017/09/26/432831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]FastDFS（1）：Centos7 安装FastDFS+nginx module(转)</title><link>http://www.blogjava.net/jlin/archive/2015/12/15/428661.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Tue, 15 Dec 2015 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/12/15/428661.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/428661.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/12/15/428661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/428661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/428661.html</trackback:ping><description><![CDATA[<p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">本文原文连接:&nbsp;<a href="http://blog.csdn.net/freewebsys/article/details/45150941" style="text-decoration: none; color: #000000;">http://blog.csdn.net/freewebsys/article/details/45150941</a>&nbsp;转载请注明出处！</p><h3>1，关于FastDFS</h3><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">摘自：<a href="http://www.oschina.net/p/fastdfs" style="text-decoration: none; color: #000000;">http://www.oschina.net/p/fastdfs</a>&nbsp;<br />FastDFS是一个开源的分布式文件系统，她对文件进行管理，功能包括：文件存储、文件同步、文件访问（文件上传、文件下载）等，解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务，如相册网站、视频网站等等。</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">FastDFS服务端有两个角色：跟踪器（tracker）和存储节点（storage）。跟踪器主要做调度工作，在访问上起负载均衡的作用。</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">存储节点存储文件，完成文件管理的所有功能：存储、同步和提供存取接口，FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性，以键值对（key value pair）方式表示，如：width=1024，其中的key为width，value为1024。文件meta data是文件属性列表，可以包含多个键值对。</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">GitHub：<a href="https://github.com/happyfish100/fastdfs" style="text-decoration: none; color: #000000;">https://github.com/happyfish100/fastdfs</a>&nbsp;<br />一个写的不错的博客：<a href="http://tech.uc.cn/?p=221" style="text-decoration: none; color: #000000;">http://tech.uc.cn/?p=221</a></p><h3>2，安装FastDFS</h3><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">参考文档：&nbsp;<br /><a href="https://github.com/happyfish100/fastdfs/blob/master/INSTALL" style="text-decoration: none; color: #000000;">https://github.com/happyfish100/fastdfs/blob/master/INSTALL</a></p><h4>2.1，安装编译工具</h4><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  lasso"="">yum <span style="padding: 0px; margin: 0px;">-y</span> groupinstall <span style="padding: 0px; margin: 0px;">'Development Tools'</span>  yum <span style="padding: 0px; margin: 0px;">-y</span> install wget </code></pre><h4>2.2，安装libfastcommon类库</h4><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">必须先按照这个，否则报错：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  lasso"="">cc <span style="padding: 0px; margin: 0px;">-Wall</span> <span style="padding: 0px; margin: 0px;">-D_FILE_OFFSET_BITS</span><span style="padding: 0px; margin: 0px;">=</span><span style="padding: 0px; margin: 0px;">64</span> <span style="padding: 0px; margin: 0px;">-D_GNU_SOURCE</span> <span style="padding: 0px; margin: 0px;">-g</span> <span style="padding: 0px; margin: 0px;">-O</span> <span style="padding: 0px; margin: 0px;">-DDEBUG_FLAG</span> <span style="padding: 0px; margin: 0px;">-DOS_LINUX</span> <span style="padding: 0px; margin: 0px;">-DIOEVENT_USE_EPOLL</span> <span style="padding: 0px; margin: 0px;">-c</span> <span style="padding: 0px; margin: 0px;">-o</span> <span style="padding: 0px; margin: 0px;">..</span>/common/fdfs_global<span style="padding: 0px; margin: 0px;">.</span>o <span style="padding: 0px; margin: 0px;">..</span>/common/fdfs_global<span style="padding: 0px; margin: 0px;">.</span>c  <span style="padding: 0px; margin: 0px;">-I</span><span style="padding: 0px; margin: 0px;">..</span>/common <span style="padding: 0px; margin: 0px;">-I</span>/usr/include/fastcommon <span style="padding: 0px; margin: 0px;">..</span>/common/fdfs_global<span style="padding: 0px; margin: 0px;">.</span>c:<span style="padding: 0px; margin: 0px;">20</span>:<span style="padding: 0px; margin: 0px;">20</span>: fatal error: logger<span style="padding: 0px; margin: 0px;">.</span>h: No such file <span style="padding: 0px; margin: 0px;">or</span> directory  <span style="padding: 0px; margin: 0px;">#include</span> <span style="padding: 0px; margin: 0px;">"logger.h"</span>                     ^ compilation terminated<span style="padding: 0px; margin: 0px;">.</span> <span style="padding: 0px; margin: 0px;">...</span><span style="padding: 0px; margin: 0px;">...</span><span style="padding: 0px; margin: 0px;">..</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">直接下载安装即可：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">wget https://github<span style="padding: 0px; margin: 0px;">.com</span>/happyfish100/libfastcommon/archive/master<span style="padding: 0px; margin: 0px;">.zip</span> unzip master<span style="padding: 0px; margin: 0px;">.zip</span> cd libfastcommon-master ./make<span style="padding: 0px; margin: 0px;">.sh</span> ./make<span style="padding: 0px; margin: 0px;">.sh</span> install</code></pre><h4>2.3，安装FastDFS</h4><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">wget  https://github<span style="padding: 0px; margin: 0px;">.com</span>/happyfish100/fastdfs/archive/V5<span style="padding: 0px; margin: 0px;">.05</span><span style="padding: 0px; margin: 0px;">.tar</span><span style="padding: 0px; margin: 0px;">.gz</span> tar -zxvf V5<span style="padding: 0px; margin: 0px;">.05</span><span style="padding: 0px; margin: 0px;">.tar</span><span style="padding: 0px; margin: 0px;">.gz</span>  cd fastdfs-<span style="padding: 0px; margin: 0px;">5.05</span>/ ./make<span style="padding: 0px; margin: 0px;">.sh</span> ./make<span style="padding: 0px; margin: 0px;">.sh</span> install </code></pre><h4>2.4，启动FastDFS</h4><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">安装之后配置文件在目录/etc/fdfs。</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">mv storage<span style="padding: 0px; margin: 0px;">.conf</span><span style="padding: 0px; margin: 0px;">.sample</span>  storage<span style="padding: 0px; margin: 0px;">.conf</span> mv tracker<span style="padding: 0px; margin: 0px;">.conf</span><span style="padding: 0px; margin: 0px;">.sample</span> tracker<span style="padding: 0px; margin: 0px;">.conf</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">首先修改配置文件：&nbsp;<br />/etc/fdfs/tracker.conf，修改路径到/data/fdfs目录。</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  fsharp"=""># the <span style="padding: 0px; margin: 0px;">base</span> path <span style="padding: 0px; margin: 0px;">to</span> store data <span style="padding: 0px; margin: 0px;">and</span> log files base_path=/data/fdfs</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">启动：&nbsp;<br />/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">修改配置文件：&nbsp;<br />/etc/fdfs/storage.conf，修改路径到/data/fdfs目录，同时配置tracker_server地址。</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  vala"=""><span style="padding: 0px; margin: 0px;"># the base path to store data and log files</span> base_path=/data/fdfs <span style="padding: 0px; margin: 0px;"># tracker_server can ocur more than once, and tracker_server format is</span> <span style="padding: 0px; margin: 0px;">#  "host:port", host can be hostname or ip address</span> tracker_server=<span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span>:<span style="padding: 0px; margin: 0px;">22122</span> <span style="padding: 0px; margin: 0px;"># store_path#, based 0, if store_path0 not exists, it's value is base_path</span> <span style="padding: 0px; margin: 0px;"># the paths must be exist</span> store_path0=/data/fdfs <span style="padding: 0px; margin: 0px;">#store_path1=/home/yuqing/fastdfs2</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">启动的时候，看日志没有错误就说明启动成功。&nbsp;<br />查看fdfs进程：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"=""><span style="padding: 0px; margin: 0px;">#ps -ef | grep fdfs</span> root     <span style="padding: 0px; margin: 0px;">19880</span>     <span style="padding: 0px; margin: 0px;">1</span>  <span style="padding: 0px; margin: 0px;">0</span> <span style="padding: 0px; margin: 0px;">21</span>:<span style="padding: 0px; margin: 0px;">42</span> ?        <span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span> /usr/bin/fdfs_trackerd /etc/fdfs/tracker<span style="padding: 0px; margin: 0px;">.conf</span> start root     <span style="padding: 0px; margin: 0px;">20050</span>     <span style="padding: 0px; margin: 0px;">1</span>  <span style="padding: 0px; margin: 0px;">0</span> <span style="padding: 0px; margin: 0px;">22</span>:<span style="padding: 0px; margin: 0px;">08</span> ?        <span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span> /usr/bin/fdfs_storaged /etc/fdfs/storage<span style="padding: 0px; margin: 0px;">.conf</span> start root     <span style="padding: 0px; margin: 0px;">20060</span> <span style="padding: 0px; margin: 0px;">19915</span>  <span style="padding: 0px; margin: 0px;">0</span> <span style="padding: 0px; margin: 0px;">22</span>:<span style="padding: 0px; margin: 0px;">08</span> pts/<span style="padding: 0px; margin: 0px;">1</span>    <span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span>:<span style="padding: 0px; margin: 0px;">00</span> grep --color=auto fdfs</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">2.5 安装nginx + lua + fastdfs module&nbsp;<br />下载fastdfs-nginx-module模块&nbsp;<br /><a href="https://github.com/happyfish100/fastdfs-nginx-module" style="text-decoration: none; color: #000000;">https://github.com/happyfish100/fastdfs-nginx-module</a>&nbsp;<br />下载openresty nginx +lua包</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">wget https://github<span style="padding: 0px; margin: 0px;">.com</span>/happyfish100/fastdfs-nginx-module/archive/master<span style="padding: 0px; margin: 0px;">.zip</span> unzip fastdfs-nginx-module-master<span style="padding: 0px; margin: 0px;">.zip</span> wget http://openresty<span style="padding: 0px; margin: 0px;">.org</span>/download/ngx_openresty-<span style="padding: 0px; margin: 0px;">1.7</span><span style="padding: 0px; margin: 0px;">.10</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.tar</span><span style="padding: 0px; margin: 0px;">.gz</span> tar -zxvf ngx_openresty-<span style="padding: 0px; margin: 0px;">1.7</span><span style="padding: 0px; margin: 0px;">.10</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.tar</span><span style="padding: 0px; margin: 0px;">.gz</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">编译安装：这里注意下，需要增加参数。&nbsp;<br />一个是stub_status统计模块，一个是realip模块。&nbsp;<br />参考地址：&nbsp;<br /><a href="http://blog.danielss.com/?p=80" style="text-decoration: none; color: #000000;">http://blog.danielss.com/?p=80</a>&nbsp;<br /><a href="http://wiki.nginx.org/HttpRealipModuleChs" style="text-decoration: none; color: #000000;">http://wiki.nginx.org/HttpRealipModuleChs</a></p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  lasso"="">yum <span style="padding: 0px; margin: 0px;">-y</span> install pcre<span style="padding: 0px; margin: 0px;">-devel</span> openssl openssl<span style="padding: 0px; margin: 0px;">-devel</span> cd ngx_openresty<span style="padding: 0px; margin: 0px;">-</span><span style="padding: 0px; margin: 0px;">1.7</span><span style="padding: 0px; margin: 0px;">.10</span><span style="padding: 0px; margin: 0px;">.1</span> <span style="padding: 0px; margin: 0px;">.</span>/configure <span style="padding: 0px; margin: 0px;">--</span><span style="padding: 0px; margin: 0px;">with</span><span style="padding: 0px; margin: 0px;">-luajit</span> <span style="padding: 0px; margin: 0px;">--</span><span style="padding: 0px; margin: 0px;">with</span><span style="padding: 0px; margin: 0px;">-http_stub_status_module</span> <span style="padding: 0px; margin: 0px;">--</span><span style="padding: 0px; margin: 0px;">with</span><span style="padding: 0px; margin: 0px;">-http_ssl_module</span> <span style="padding: 0px; margin: 0px;">--</span><span style="padding: 0px; margin: 0px;">with</span><span style="padding: 0px; margin: 0px;">-http_realip_module</span> <span style="padding: 0px; margin: 0px;">--</span>add<span style="padding: 0px; margin: 0px;">-module</span><span style="padding: 0px; margin: 0px;">=</span>/root/fastdfs<span style="padding: 0px; margin: 0px;">-nginx</span><span style="padding: 0px; margin: 0px;">-module</span><span style="padding: 0px; margin: 0px;">-master</span>/src  gmake gmake install</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">nginx +lua安装路径：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  livecodeserver"="">  nginx path prefix: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx"</span>   nginx binary <span style="padding: 0px; margin: 0px;">file</span>: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/sbin/nginx"</span>   nginx configuration prefix: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/conf"</span>   nginx configuration <span style="padding: 0px; margin: 0px;">file</span>: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/conf/nginx.conf"</span>   nginx pid <span style="padding: 0px; margin: 0px;">file</span>: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/logs/nginx.pid"</span>   nginx error <span style="padding: 0px; margin: 0px;">log</span> <span style="padding: 0px; margin: 0px;">file</span>: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/logs/error.log"</span>   nginx <span style="padding: 0px; margin: 0px;">http</span> access <span style="padding: 0px; margin: 0px;">log</span> <span style="padding: 0px; margin: 0px;">file</span>: <span style="padding: 0px; margin: 0px;">"/usr/local/openresty/nginx/logs/access.log"</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">启动，重启nginx</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  vala"=""><span style="padding: 0px; margin: 0px;">#启动</span> /usr/local/openresty/nginx/sbin/nginx <span style="padding: 0px; margin: 0px;">#重启</span>  /usr/local/openresty/nginx/sbin/nginx -s restart</code></pre><h3>3，测试FastDFS</h3><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">配置服务：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">cd /etc/fdfs mv client<span style="padding: 0px; margin: 0px;">.conf</span><span style="padding: 0px; margin: 0px;">.sample</span> client<span style="padding: 0px; margin: 0px;">.conf</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">修改配置：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  vala"=""><span style="padding: 0px; margin: 0px;"># the base path to store log files</span> base_path=/data/fdfs  <span style="padding: 0px; margin: 0px;"># tracker_server can ocur more than once, and tracker_server format is</span> <span style="padding: 0px; margin: 0px;">#  "host:port", host can be hostname or ip address</span> tracker_server=<span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span>:<span style="padding: 0px; margin: 0px;">22122</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">配置nginx：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  lasso"="">cp /root/fastdfs<span style="padding: 0px; margin: 0px;">-nginx</span><span style="padding: 0px; margin: 0px;">-module</span><span style="padding: 0px; margin: 0px;">-master</span>/src/mod_fastdfs<span style="padding: 0px; margin: 0px;">.</span>conf /etc/fdfs<span style="padding: 0px; margin: 0px;">/</span> mkdir /<span style="padding: 0px; margin: 0px;">data</span>/ngx</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">修改mod_fastdfs.conf配置文件：修改tracker端口，否则nginx启动不了。路径也必须修改，否则找不到文件。</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  vala"=""><span style="padding: 0px; margin: 0px;"># the base path to store log files</span> base_path=/data/ngx <span style="padding: 0px; margin: 0px;"># FastDFS tracker_server can ocur more than once, and tracker_server format is</span> <span style="padding: 0px; margin: 0px;">#  "host:port", host can be hostname or ip address</span> <span style="padding: 0px; margin: 0px;"># valid only when load_fdfs_parameters_from_tracker is true</span> tracker_server=<span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span>:<span style="padding: 0px; margin: 0px;">22122</span> <span style="padding: 0px; margin: 0px;"># store_path#, based 0, if store_path0 not exists, it's value is base_path</span> <span style="padding: 0px; margin: 0px;"># the paths must be exist</span> <span style="padding: 0px; margin: 0px;"># must same as storage.conf</span> store_path0=/data/fdfs</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">拷贝配置文件，否则nginx启动不了，报错：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  vhdl"="">[<span style="padding: 0px; margin: 0px;">2015</span>-<span style="padding: 0px; margin: 0px;">04</span>-<span style="padding: 0px; margin: 0px;">28</span> <span style="padding: 0px; margin: 0px;">11</span>:<span style="padding: 0px; margin: 0px;">30</span>:<span style="padding: 0px; margin: 0px;">14</span>] ERROR - <span style="padding: 0px; margin: 0px;">file</span>: ini_file_reader.c, line: <span style="padding: 0px; margin: 0px;">315</span>, include <span style="padding: 0px; margin: 0px;">file</span> <span style="padding: 0px; margin: 0px;">"http.conf"</span> <span style="padding: 0px; margin: 0px;">not</span> exists, line: <span style="padding: 0px; margin: 0px;">"#include http.conf"</span> [<span style="padding: 0px; margin: 0px;">2015</span>-<span style="padding: 0px; margin: 0px;">04</span>-<span style="padding: 0px; margin: 0px;">28</span> <span style="padding: 0px; margin: 0px;">11</span>:<span style="padding: 0px; margin: 0px;">30</span>:<span style="padding: 0px; margin: 0px;">14</span>] ERROR - <span style="padding: 0px; margin: 0px;">file</span>: /root/fastdfs-nginx-module-master/src/common.c, line: <span style="padding: 0px; margin: 0px;">155</span>, load conf <span style="padding: 0px; margin: 0px;">file</span> <span style="padding: 0px; margin: 0px;">"/etc/fdfs/mod_fastdfs.conf"</span> fail, ret code: <span style="padding: 0px; margin: 0px;">2</span> <span style="padding: 0px; margin: 0px;">2015</span>/<span style="padding: 0px; margin: 0px;">04</span>/<span style="padding: 0px; margin: 0px;">28</span> <span style="padding: 0px; margin: 0px;">11</span>:<span style="padding: 0px; margin: 0px;">30</span>:<span style="padding: 0px; margin: 0px;">14</span> [alert] <span style="padding: 0px; margin: 0px;">19969</span>#<span style="padding: 0px; margin: 0px;">0</span>: worker <span style="padding: 0px; margin: 0px;">process</span> <span style="padding: 0px; margin: 0px;">2753</span> exited <span style="padding: 0px; margin: 0px;">with</span> fatal code <span style="padding: 0px; margin: 0px;">2</span> <span style="padding: 0px; margin: 0px;">and</span> cannot be respawned </code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">解决办法：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"=""><span style="padding: 0px; margin: 0px;">cp</span> /root/fastdfs-master/conf/http<span style="padding: 0px; margin: 0px;">.conf</span> /root/fastdfs-master/conf/mime<span style="padding: 0px; margin: 0px;">.types</span>  /etc/fdfs</code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">nginx配置修改vi /usr/local/openresty/nginx/conf/nginx.conf</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  lasso"="">    server {         listen       <span style="padding: 0px; margin: 0px;">80</span>;         server_name  localhost;          charset utf8;          location /M00 {                 alias /<span style="padding: 0px; margin: 0px;">data</span>/fdfs/<span style="padding: 0px; margin: 0px;">data</span>;                 ngx_fastdfs_module;         }    <span style="padding: 0px; margin: 0px;">...</span><span style="padding: 0px; margin: 0px;">...</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">创建连接</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  haskell"=""><span style="padding: 0px; margin: 0px;">ln</span> -s /<span style="padding: 0px; margin: 0px;"><span style="padding: 0px; margin: 0px;">data</span>/fdfs/<span style="padding: 0px; margin: 0px;">data</span> /<span style="padding: 0px; margin: 0px;">data</span>/fdfs/<span style="padding: 0px; margin: 0px;">data</span>/<span style="padding: 0px; margin: 0px;">M00</span></span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">重启nginx。&nbsp;<br />测试命令：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  avrasm"="">echo <span style="padding: 0px; margin: 0px;">"test fastdfs"</span> &gt; test<span style="padding: 0px; margin: 0px;">.html</span>  /usr/bin/fdfs_test /etc/fdfs/client<span style="padding: 0px; margin: 0px;">.conf</span> upload test<span style="padding: 0px; margin: 0px;">.html</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">上传成功，执行结果：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  mel"=""> This is FastDFS client test program v5<span style="padding: 0px; margin: 0px;">.05</span>  Copyright (C) <span style="padding: 0px; margin: 0px;">2008</span>, Happy Fish / YuQing  FastDFS may be copied only under the terms of the GNU General Public License V3, which may be found <span style="padding: 0px; margin: 0px;">in</span> the FastDFS <span style="padding: 0px; margin: 0px;">source</span> kit. Please visit the FastDFS Home Page http:<span style="padding: 0px; margin: 0px;">//www.csource.org/</span> <span style="padding: 0px; margin: 0px;">for</span> more detail.  [<span style="padding: 0px; margin: 0px;">2015</span>-<span style="padding: 0px; margin: 0px;">04</span>-<span style="padding: 0px; margin: 0px;">25</span> <span style="padding: 0px; margin: 0px;">18</span>:<span style="padding: 0px; margin: 0px;">06</span>:<span style="padding: 0px; margin: 0px;">09</span>] DEBUG - base_path=/data/fdfs, connect_timeout=<span style="padding: 0px; margin: 0px;">30</span>, network_timeout=<span style="padding: 0px; margin: 0px;">60</span>, tracker_server_count=<span style="padding: 0px; margin: 0px;">1</span>, anti_steal_token=<span style="padding: 0px; margin: 0px;">0</span>, anti_steal_secret_key length=<span style="padding: 0px; margin: 0px;">0</span>, use_connection_pool=<span style="padding: 0px; margin: 0px;">0</span>, g_connection_pool_max_idle_time=<span style="padding: 0px; margin: 0px;">3600</span>s, use_storage_id=<span style="padding: 0px; margin: 0px;">0</span>, storage server id count: <span style="padding: 0px; margin: 0px;">0</span>  tracker_query_storage_store_list_without_group:         server <span style="padding: 0px; margin: 0px;">1.</span> group_name=, ip_addr=<span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span>, port=<span style="padding: 0px; margin: 0px;">23000</span>  group_name=group1, ip_addr=<span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span>, port=<span style="padding: 0px; margin: 0px;">23000</span> storage_upload_by_filename group_name=group1, remote_filename=M00/<span style="padding: 0px; margin: 0px;">00</span>/<span style="padding: 0px; margin: 0px;">00</span>/wKgC1FU7ZxGAF19vAAAADcvBslg01.html <span style="padding: 0px; margin: 0px;">source</span> ip address: <span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span> <span style="padding: 0px; margin: 0px;">file</span> timestamp=<span style="padding: 0px; margin: 0px;">2015</span>-<span style="padding: 0px; margin: 0px;">04</span>-<span style="padding: 0px; margin: 0px;">25</span> <span style="padding: 0px; margin: 0px;">18</span>:<span style="padding: 0px; margin: 0px;">06</span>:<span style="padding: 0px; margin: 0px;">09</span> <span style="padding: 0px; margin: 0px;">file</span> <span style="padding: 0px; margin: 0px;">size</span>=<span style="padding: 0px; margin: 0px;">13</span> <span style="padding: 0px; margin: 0px;">file</span> crc32=<span style="padding: 0px; margin: 0px;">3418468952</span> example <span style="padding: 0px; margin: 0px;">file</span> url: http:<span style="padding: 0px; margin: 0px;">//192.168.1.36/group1/M00/00/00/wKgC1FU7ZxGAF19vAAAADcvBslg01.html</span> storage_upload_slave_by_filename group_name=group1, remote_filename=M00/<span style="padding: 0px; margin: 0px;">00</span>/<span style="padding: 0px; margin: 0px;">00</span>/wKgC1FU7ZxGAF19vAAAADcvBslg01_big.html <span style="padding: 0px; margin: 0px;">source</span> ip address: <span style="padding: 0px; margin: 0px;">192.168</span><span style="padding: 0px; margin: 0px;">.1</span><span style="padding: 0px; margin: 0px;">.36</span> <span style="padding: 0px; margin: 0px;">file</span> timestamp=<span style="padding: 0px; margin: 0px;">2015</span>-<span style="padding: 0px; margin: 0px;">04</span>-<span style="padding: 0px; margin: 0px;">25</span> <span style="padding: 0px; margin: 0px;">18</span>:<span style="padding: 0px; margin: 0px;">06</span>:<span style="padding: 0px; margin: 0px;">09</span> <span style="padding: 0px; margin: 0px;">file</span> <span style="padding: 0px; margin: 0px;">size</span>=<span style="padding: 0px; margin: 0px;">13</span> <span style="padding: 0px; margin: 0px;">file</span> crc32=<span style="padding: 0px; margin: 0px;">3418468952</span> example <span style="padding: 0px; margin: 0px;">file</span> url: http:<span style="padding: 0px; margin: 0px;">//192.168.1.36/group1/M00/00/00/wKgC1FU7ZxGAF19vAAAADcvBslg01_big.html</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">测试访问：</p><pre style="border: 1px solid #ffffcc; font-family: 'Courier New'; overflow: auto; font-size: 16px; line-height: 24px; background-color: #fffffc;"><code hljs=""  cs"="">curl http:<span style="padding: 0px; margin: 0px;">//192.168.1.36/M00/00/00/wKgC1FU7ZxGAF19vAAAADcvBslg01_big.html</span></code></pre><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">如果返回&#8220;test fastdfs&#8221;说明配置成功。上面的每一步修改都要正确才可以。</p><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">查看nginx错误日志：&nbsp;<br />tail -f /usr/local/openresty/nginx/logs/error.log</p><h3>4，总结</h3><p style="padding: 0px; margin: 10px 0px; font-family: Arial; font-size: 16px; line-height: 24px; background-color: #ededed;">FastDFS非常好的分布式文件系统。配置简单，可以多机器部署，同时官方给了一个Nginx模块，可以直接用nginx访问，非常方便。这样减少了中间的tomcat层，效率高。&nbsp;<br />接下来继续研究lua的图片压缩。直接在nginx层进行图片压缩。效率更高，同时图片读取FastDFS的文件。</p><img src ="http://www.blogjava.net/jlin/aggbug/428661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-12-15 14:22 <a href="http://www.blogjava.net/jlin/archive/2015/12/15/428661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proxool详细配置</title><link>http://www.blogjava.net/jlin/archive/2015/01/28/422501.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 28 Jan 2015 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/01/28/422501.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/422501.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/01/28/422501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/422501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/422501.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; proxool一个数据库连接池框架，提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速，成熟，健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。到目前为止最新版本是proxool 0.9.1,可从官网下载最新版本http://proxool.sourceforge.net&nbsp;一、配置proxool.xml文...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2015/01/28/422501.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/422501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-01-28 11:30 <a href="http://www.blogjava.net/jlin/archive/2015/01/28/422501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Transaction has been rolled back because it has been marked as rollback(转)</title><link>http://www.blogjava.net/jlin/archive/2014/12/20/421587.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 20 Dec 2014 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2014/12/20/421587.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/421587.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2014/12/20/421587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/421587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/421587.html</trackback:ping><description><![CDATA[<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">框架采用的是spring管理声明式事务，这几天业务开发时遇到了点麻烦，记录下备忘。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;场景：在Service类中使用子事务(saveponit)时，当子事务抛出异常后，此异常处理掉不继续往外抛，spring在提交主事务时会抛出</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span>org.springframework.transaction.UnexpectedRollbackException: Transaction has been rolled back because it has been marked as rollback</span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;方法调用结构：</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; 假若有A、B、C三个Service类，其实例对象分别为a、b、c,类分别定义如下：</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A {</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 方法() { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //propagation="REQUIRED"</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; try{</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.方法();</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp;} catch (Exception e) {</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<span style="white-space: pre"> </span>&nbsp; &nbsp; &nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"><span style="white-space: pre"></span></span>&nbsp; &nbsp;}</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; B{</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;savePoint方法() { &nbsp;//propagation="NESTED"</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp;c.方法(); //如果这里边的操作全是普通类（不是Service类）操作，不会有问题。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C{</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 方法() { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //propagation="REQUIRED"</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; throw new Exception("出错");</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp; &nbsp;}</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp;通过调试spring源码&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;......</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Getting transaction for [A.方法] .....</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;......</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp;Creating nested transaction with name [B.savePoint方法]........</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp;......</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Participating in existing transaction</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Getting transaction for [C.方法]</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;........</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp;Participating transaction failed - marking existing transaction as rollback-only</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//此时，已把主事务标记成了rollback-only</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;所以，当在a.方法完成时提交事务时会报Transaction has been rolled back because it has been marked as rollback错误。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;认真的您可能会发现，在 org.springframework.transaction.support.AbstractPlatformTransactionManager 中有个叫</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">isGlobalRollbackOnParticipationFailure的参数，默认是true.</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 源码中说明：</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; Switch this to "false" to let the transaction originator make the rollback decision. If a participating transaction fails with an exception, the caller can still decide to continue with a different path within the transaction. However, note that this will only work as long as all participating resources are capable of continuing towards a transaction commit even after a data access failure: This is generally not the case for a Hibernate Session, for example; neither is it for a sequence of JDBC insert/update/delete operations.</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 大意是：如果isGlobalRollbackOnParticipationFailure为false,则会让主事务决定回滚，如果当遇到exception加入事务失败时，调用者能继续在事务内决定是回滚还是继续。然而，要注意是那样做仅仅适用于在数据访问失败的情况下且只要所有操作事务能提交。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><strong>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</strong></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><strong>&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span></strong>初步解决方案：</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre">&lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ref="dataSource" /&gt; <strong>&lt;property name="globalRollbackOnParticipationFailure" value="false" /&gt; &lt;!--指定此参数为false--&gt;</strong></span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre">&lt;/bean&gt; </span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="white-space: pre"></span>&nbsp; &nbsp; 经测试，此问题暂时得到解决，不知道会不会引起其它问题，至少目前还没有发现其它异常。您若通过此方案解决之后出现了新的问题请留信回复，我们一起交流，非常感谢！</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p><img src ="http://www.blogjava.net/jlin/aggbug/421587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2014-12-20 14:23 <a href="http://www.blogjava.net/jlin/archive/2014/12/20/421587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jaxb的解析xml和生成xml列子</title><link>http://www.blogjava.net/jlin/archive/2014/12/11/421277.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 11 Dec 2014 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2014/12/11/421277.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/421277.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2014/12/11/421277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/421277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/421277.html</trackback:ping><description><![CDATA[解析XML文件:xml 文件如下：<br /><div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</div><div>&lt;trans&gt;</div><div><span style="white-space:pre">	</span>&lt;tran&gt;</div><div><span style="white-space:pre">		</span>&lt;requestId&gt;111111&lt;/requestId&gt;</div><div><span style="white-space:pre">		</span>&lt;orderNo&gt;13141322&lt;/orderNo&gt;</div><div><span style="white-space:pre">		</span>&lt;returnCode&gt;000001&lt;/returnCode&gt;</div><div><span style="white-space:pre">		</span>&lt;returnInfo&gt;交易失败&lt;/returnInfo&gt;</div><div><span style="white-space:pre">	</span>&lt;/tran&gt;</div><div><span style="white-space:pre">	</span>&lt;tran&gt;</div><div><span style="white-space:pre">		</span>&lt;requestId&gt;2222222&lt;/requestId&gt;</div><div><span style="white-space:pre">		</span>&lt;orderNo&gt;13141323&lt;/orderNo&gt;</div><div><span style="white-space:pre">		</span>&lt;returnCode&gt;000000&lt;/returnCode&gt;</div><div><span style="white-space:pre">		</span>&lt;returnInfo&gt;交易成功&lt;/returnInfo&gt;</div><div><span style="white-space:pre">	</span>&lt;/tran&gt;</div><div>&lt;/trans&gt;<br />建立对应的JAVA bean类<br /><div>Trans.java类</div><div>package com.jaxb.test;</div><div>import java.util.List;</div><div>import javax.xml.bind.annotation.XmlAccessType;</div><div>import javax.xml.bind.annotation.XmlAccessorType;</div><div>import javax.xml.bind.annotation.XmlElement;</div><div>import javax.xml.bind.annotation.XmlRootElement;</div><div></div><div>@XmlRootElement(name = "trans")</div><div>@XmlAccessorType(XmlAccessType.FIELD)</div><div>public class Trans{</div><div><span style="white-space:pre">	</span>@XmlElement(name = "tran")</div><div><span style="white-space:pre">	</span>private List&lt;Tran&gt; data = null;</div><div></div><div><span style="white-space:pre">	</span>public List&lt;Tran&gt; getData() {</div><div><span style="white-space:pre">		</span>return data;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void setData(List&lt;Tran&gt; data) {</div><div><span style="white-space:pre">		</span>this.data = data;</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div><div>Tran.java类</div><div>package com.jaxb.test;</div><div>import javax.xml.bind.annotation.XmlAccessType;</div><div>import javax.xml.bind.annotation.XmlAccessorType;</div><div>import javax.xml.bind.annotation.XmlElement;</div><div></div><div>@XmlAccessorType(XmlAccessType.FIELD)</div><div>public class Tran {</div><div><span style="white-space:pre">	</span>@XmlElement(name = "requestId")</div><div><span style="white-space:pre">	</span>private Long requestId;</div><div><span style="white-space:pre">	</span>@XmlElement(name = "orderNo")</div><div><span style="white-space:pre">	</span>private Long orderNo;</div><div><span style="white-space:pre">	</span>@XmlElement(name = "returnCode")</div><div><span style="white-space:pre">	</span>private String returnCode;</div><div><span style="white-space:pre">	</span>@XmlElement(name = "returnInfo")</div><div><span style="white-space:pre">	</span>private String returnInfo;</div><div></div><div><span style="white-space:pre">	</span>public Long getRequestId() {</div><div><span style="white-space:pre">		</span>return requestId;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void setRequestId(Long requestId) {</div><div><span style="white-space:pre">		</span>this.requestId = requestId;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public Long getOrderNo() {</div><div><span style="white-space:pre">		</span>return orderNo;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void setOrderNo(Long orderNo) {</div><div><span style="white-space:pre">		</span>this.orderNo = orderNo;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public String getReturnCode() {</div><div><span style="white-space:pre">		</span>return returnCode;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void setReturnCode(String returnCode) {</div><div><span style="white-space:pre">		</span>this.returnCode = returnCode;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public String getReturnInfo() {</div><div><span style="white-space:pre">		</span>return returnInfo;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void setReturnInfo(String returnInfo) {</div><div><span style="white-space:pre">		</span>this.returnInfo = returnInfo;</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div>建立测试类<br /><div><div>import java.io.File;</div><div>import java.util.ArrayList;</div><div>import java.util.List;</div><div></div><div>import javax.xml.bind.JAXBContext;</div><div>import javax.xml.bind.JAXBException;</div><div>import javax.xml.bind.Marshaller;</div><div>import javax.xml.bind.Unmarshaller;</div><div></div><div>public class TestJAXB {<span style="white-space: pre;">	</span></div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>try {</div><div><span style="white-space:pre">			</span>//read xml file to Java object</div><div><span style="white-space:pre">			</span>Trans trans = TestJAXB.readString(Trans.class,"input.xml");</div><div><span style="white-space:pre">			</span>List&lt;Tran&gt; datas = trans.getDatas();</div><div><span style="white-space:pre">			</span>for (Tran o : datas) {</div><div><span style="white-space:pre">				</span>System.out.println(o.getReturnCode()+";"+o.getReturnInfo());</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>//write java object to xml</div><div><span style="white-space:pre">			</span>Tran tran = new Tran();</div><div>&nbsp; &nbsp; &nbsp; tran.setOrderNo(11111L);</div><div>&nbsp; &nbsp; &nbsp; tran.setRequestId(22222L);</div><div>&nbsp; &nbsp; &nbsp; tran.setReturnCode("0000");</div><div>&nbsp; &nbsp; &nbsp; tran.setReturnInfo("success");</div><div>&nbsp; &nbsp; &nbsp; Tran tran2 = new Tran();</div><div>&nbsp; &nbsp; &nbsp; tran2.setOrderNo(33333L);</div><div>&nbsp; &nbsp; &nbsp; tran2.setRequestId(44444L);</div><div>&nbsp; &nbsp; &nbsp; tran2.setReturnCode("0001");</div><div>&nbsp; &nbsp; &nbsp; tran2.setReturnInfo("failure");</div><div>&nbsp; &nbsp; &nbsp; Trans trxs = new Trans();</div><div>&nbsp; &nbsp; &nbsp; List&lt;Tran&gt; list = new ArrayList&lt;Tran&gt;();&nbsp;</div><div>&nbsp; &nbsp; &nbsp; list.add(tran);</div><div>&nbsp; &nbsp; &nbsp; list.add(tran2);</div><div>&nbsp; &nbsp; &nbsp; trxs.setDatas(list);</div><div><span style="white-space:pre">			</span>File file = new File("D:/output.xml");</div><div><span style="white-space:pre">			</span>JAXBContext jaxbContext = JAXBContext.newInstance(Trans.class);</div><div><span style="white-space:pre">			</span>Marshaller jaxbMarshaller = jaxbContext.createMarshaller();</div><div><span style="white-space:pre">			</span>// output pretty printed</div><div><span style="white-space:pre">			</span>jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);</div><div><span style="white-space:pre">			</span>jaxbMarshaller.marshal(trxs, file);</div><div><span style="white-space:pre">			</span>jaxbMarshaller.marshal(trxs, System.out);</div><div><span style="white-space:pre">		</span>} catch (JAXBException e) {</div><div><span style="white-space:pre">			</span>e.printStackTrace();</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>@SuppressWarnings("unchecked")</div><div><span style="white-space:pre">	</span>public static &lt;T&gt; T readString(Class&lt;T&gt; clazz, String context) throws JAXBException {</div><div><span style="white-space:pre">		</span>try {</div><div><span style="white-space:pre">			</span>JAXBContext jc = JAXBContext.newInstance(clazz);</div><div><span style="white-space:pre">			</span>Unmarshaller u = jc.createUnmarshaller();</div><div><span style="white-space:pre">			</span>return (T) u.unmarshal(new File(context));</div><div><span style="white-space:pre">		</span>} catch (JAXBException e) {</div><div><span style="white-space:pre">			</span>throw e;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div></div></div></div><img src ="http://www.blogjava.net/jlin/aggbug/421277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2014-12-11 14:44 <a href="http://www.blogjava.net/jlin/archive/2014/12/11/421277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate4之JPA规范配置详解(转)</title><link>http://www.blogjava.net/jlin/archive/2014/10/29/419162.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 29 Oct 2014 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2014/10/29/419162.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/419162.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2014/10/29/419162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/419162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/419162.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: @Table&nbsp;Table用来定义entity主表的name，catalog，schema等属性。&nbsp;属性说明：&nbsp;name：表名catalog：对应关系数据库中的catalogschema：对应关系数据库中的schemaUniqueConstraints：定义一个UniqueConstraint数组，指定需要建唯一约束的列Java代码&nbsp;&nbsp;@Entity...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2014/10/29/419162.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/419162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2014-10-29 14:15 <a href="http://www.blogjava.net/jlin/archive/2014/10/29/419162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>