﻿<?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-miaoyachun</title><link>http://www.blogjava.net/miaoyachun/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 14:33:56 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 14:33:56 GMT</pubDate><ttl>60</ttl><item><title>Spring boot外部配置-配置中心化</title><link>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 08 Dec 2017 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/432940.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/432940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/432940.html</trackback:ping><description><![CDATA[在Spring cloud config出来之前, 自己实现了基于ZK的配置中心, 杜绝了本地properties配置文件, 原理很简单, 只是重载了PropertyPlaceholderConfigurer的mergeProperties():<br /><br /><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="color:#629755;font-style:italic;">/**<br /></span><span style="color:#629755;font-style:italic;"> * 重载合并属性实现<br /></span><span style="color:#629755;font-style:italic;"> * 先加载file properties， 然后并入ZK配置中心读取的properties<br /></span><span style="color:#629755;font-style:italic;"> *<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@return </span><span style="color:#629755;font-style:italic;">合并后的属性集合<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@throws </span><span style="color:#629755;font-style:italic;">IOException 异常<br /></span><span style="color:#629755;font-style:italic;"> */<br /></span><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">protected </span>Properties <span style="color:#ffc66d;">mergeProperties</span>() <span style="color:#cc7832;">throws </span>IOException {<br />    Properties result = <span style="color:#cc7832;">new </span>Properties()<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 加载父类的配置<br /></span>    Properties mergeProperties = <span style="color:#cc7832;">super</span>.mergeProperties()<span style="color:#cc7832;">;<br /></span>    result.putAll(mergeProperties)<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 加载从zk中读取到的配置<br /></span>    Map&lt;String<span style="color:#cc7832;">, </span>String&gt; configs = loadZkConfigs()<span style="color:#cc7832;">;<br /></span>    result.putAll(configs)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">    return </span>result<span style="color:#cc7832;">;<br /></span>}</pre></div><br />这个实现在spring项目里用起来还是挺顺手的, 但是近期部分spring-boot项目里发现这种placeholder的实现跟spring boot的@ConfigurationProperties(prefix = "xxx") 不能很好的配合工作,<br />也就是属性没有被resolve处理, 用@Value的方式确可以读到, 但是@Value配置起来如果属性多的话还是挺繁琐的, 还是倾向用@ConfigurationProperties的prefix, 于是看了下spring boot的文档发现<code>PropertySource</code> order:<div></div><div><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 />--><span style="color: #000000; ">&nbsp;&nbsp; * Devtools&nbsp;global&nbsp;settings&nbsp;properties&nbsp;on&nbsp;your&nbsp;home&nbsp;directory&nbsp;(~/.spring-boot-devtools.properties&nbsp;when&nbsp;devtools&nbsp;is&nbsp;active).<br />&nbsp;&nbsp; * @TestPropertySource&nbsp;annotations&nbsp;on&nbsp;your&nbsp;tests.<br />&nbsp;&nbsp; * @SpringBootTest#properties&nbsp;annotation&nbsp;attribute&nbsp;on&nbsp;your&nbsp;tests.<br />&nbsp;&nbsp; * Command&nbsp;line&nbsp;arguments.<br />&nbsp;&nbsp; * Properties&nbsp;from&nbsp;SPRING_APPLICATION_JSON&nbsp;(inline&nbsp;JSON&nbsp;embedded&nbsp;in&nbsp;an&nbsp;environment&nbsp;variable&nbsp;or&nbsp;system&nbsp;property)<br />&nbsp;&nbsp; * ServletConfig&nbsp;init&nbsp;parameters.<br />&nbsp;&nbsp; * ServletContext&nbsp;init&nbsp;parameters.<br />&nbsp;&nbsp; * JNDI&nbsp;attributes&nbsp;from&nbsp;java:comp/env.<br />&nbsp;&nbsp; * Java&nbsp;System&nbsp;properties&nbsp;(System.getProperties()).<br />&nbsp;&nbsp; * OS&nbsp;environment&nbsp;variables.<br />&nbsp;&nbsp; * A&nbsp;RandomValuePropertySource&nbsp;that&nbsp;only&nbsp;has&nbsp;properties&nbsp;in&nbsp;random.*.<br />&nbsp;&nbsp; * Profile-specific&nbsp;application&nbsp;properties&nbsp;outside&nbsp;of&nbsp;your&nbsp;packaged&nbsp;jar&nbsp;(application-{profile}.properties&nbsp;and&nbsp;YAML&nbsp;variants)<br />&nbsp;&nbsp; * Profile-specific&nbsp;application&nbsp;properties&nbsp;packaged&nbsp;inside&nbsp;your&nbsp;jar&nbsp;(application-{profile}.properties&nbsp;and&nbsp;YAML&nbsp;variants)<br />&nbsp;&nbsp; * Application&nbsp;properties&nbsp;outside&nbsp;of&nbsp;your&nbsp;packaged&nbsp;jar&nbsp;(application.properties&nbsp;and&nbsp;YAML&nbsp;variants).<br />&nbsp;&nbsp; * Application&nbsp;properties&nbsp;packaged&nbsp;inside&nbsp;your&nbsp;jar&nbsp;(application.properties&nbsp;and&nbsp;YAML&nbsp;variants).<br />&nbsp;&nbsp; * @PropertySource&nbsp;annotations&nbsp;on&nbsp;your&nbsp;@Configuration&nbsp;classes.<br />&nbsp;&nbsp; * Default&nbsp;properties&nbsp;(specified&nbsp;using&nbsp;SpringApplication.setDefaultProperties).</span></div></div><div></div>不难发现其会检查Java system propeties里的属性, 也就是说, 只要把mergerProperties读到的属性写入Java system props里即可, 看了下源码, 找到个切入点<br /><br /><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="color:#629755;font-style:italic;">/**<br /></span><span style="color:#629755;font-style:italic;"> * 重载处理属性实现<br /></span><span style="color:#629755;font-style:italic;"> * 根据选项, 决定是否将合并后的props写入系统属性, Spring boot需要<br /></span><span style="color:#629755;font-style:italic;"> *<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">beanFactoryToProcess<br /></span> <span style="color:#629755;font-style:italic;">* </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">props                </span><span style="color:#629755;font-style:italic;">合并后的属性<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@throws </span><span style="color:#629755;font-style:italic;">BeansException<br /></span><span style="color:#629755;font-style:italic;"> */<br /></span><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">protected void </span><span style="color:#ffc66d;">processProperties</span>(ConfigurableListableBeanFactory beanFactoryToProcess<span style="color:#cc7832;">, </span>Properties props) <span style="color:#cc7832;">throws </span>BeansException {<br />    <span style="color:#808080;">// 原有逻辑<br /></span>     <span style="color:#cc7832;">super</span>.processProperties(beanFactoryToProcess<span style="color:#cc7832;">, </span>props)<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 写入到系统属性<br /></span> <span style="color:#cc7832;">   if </span>(<span style="color:#9876aa;">writePropsToSystem</span>) {<br />       <span style="color:#808080;">// write all properties to system for spring boot<br /></span>        Enumeration&lt;?&gt; propertyNames = props.propertyNames()<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">        while </span>(propertyNames.hasMoreElements()) {<br />             String propertyName = (String) propertyNames.nextElement()<span style="color:#cc7832;">;<br /></span>             String propertyValue = props.getProperty(propertyName)<span style="color:#cc7832;">;<br /></span>             System.<span style="font-style:italic;">setProperty</span>(propertyName<span style="color:#cc7832;">, </span>propertyValue)<span style="color:#cc7832;">;<br /></span>        }<br />    }<br />}</pre></div>为避免影响过大, 设置了个开关, 是否写入系统属性, 如果是spring boot的项目, 就开启, 这样对线上非spring boot项目做到影响最小, 然后spring boot的@ConfigurationProperties完美读到属性;<br /><br />具体代码见: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor<br /><br /><div><pre style="background-color: #2b2b2b; color: #a9b7c6; font-family: &quot;宋体&quot;; font-size: 10.5pt;"><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">public </span>Object <span style="color:#ffc66d;">postProcessBeforeInitialization</span>(Object bean<span style="color:#cc7832;">, </span>String beanName)<br />      <span style="color:#cc7832;">throws </span>BeansException {<br />   <span style="color:#bbb529;">ConfigurationProperties </span>annotation = AnnotationUtils<br />         .<span style="font-style:italic;">findAnnotation</span>(bean.getClass()<span style="color:#cc7832;">, </span><span style="color:#bbb529;">ConfigurationProperties</span>.<span style="color:#cc7832;">class</span>)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">   if </span>(annotation != <span style="color:#cc7832;">null</span>) {<br />      postProcessBeforeInitialization(bean<span style="color:#cc7832;">, </span>beanName<span style="color:#cc7832;">, </span>annotation)<span style="color:#cc7832;">;<br /></span> }<br />   annotation = <span style="color:#cc7832;">this</span>.<span style="color:#9876aa;">beans</span>.findFactoryAnnotation(beanName<span style="color:#cc7832;">,<br /></span> <span style="color:#bbb529;">ConfigurationProperties</span>.<span style="color:#cc7832;">class</span>)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">   if </span>(annotation != <span style="color:#cc7832;">null</span>) {<br />      postProcessBeforeInitialization(bean<span style="color:#cc7832;">, </span>beanName<span style="color:#cc7832;">, </span>annotation)<span style="color: #cc7832;">;<br /></span> }<br />   <span style="color:#cc7832;">return </span>bean<span style="color:#cc7832;">;<br /></span>}</pre></div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/432940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2017-12-08 14:13 <a href="http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit @AfterClass访问注入对象的方法</title><link>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Sat, 15 Apr 2017 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/432461.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/432461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/432461.html</trackback:ping><description><![CDATA[<div><span data-slate-fragment="JTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJkb2N1bWVudCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyU3ByaW5nJUU5JUJCJTk4JUU4JUFFJUE0JUU0JUI4JThEJUU1JTg1JTgxJUU4JUFFJUI4JUU1JUFGJUI5JUU3JUIxJUJCJUU3JTlBJTg0JUU1JThGJTk4JUU5JTg3JThGJTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU2JTk4JUFGJUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU4JUJGJTlCJUU4JUExJThDJUU2JUIzJUE4JUU1JTg1JUE1JUU2JTkzJThEJUU0JUJEJTlDJTJDJTIwJUU0JUJEJTg2JUU2JTk4JUFGJUU1JTlDJUE4JUU2JTlGJTkwJUU0JUJBJTlCJUU1JTlDJUJBJUU2JTk5JUFGJUU2JUFGJTk0JUU1JUE2JTgyJUU1JThEJTk1JUU1JTg1JTgzJUU2JUI1JThCJUU4JUFGJTk1JUU3JTlBJTg0JTQwQWZ0ZXJDbGFzcyVFOCVBNiU4MSVFOCVBRSVCRiVFOSU5NyVBRSVFNiVCMyVBOCVFNSU4NSVBNSVFNSVBRiVCOSVFOCVCMSVBMSUyQyUyMCVFOCU4MCU4Q0p1bml0JUU3JTlBJTg0JUU4JUJGJTk5JUU0JUI4JUFBJUU2JTk2JUI5JUU2JUIzJTk1JUU1JUJGJTg1JUU5JUExJUJCJUU2JTk4JUFGJUU5JTlEJTk5JUU2JTgwJTgxJUU3JTlBJTg0JTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU0JUJBJUE3JUU3JTk0JTlGJUU0JUJBJTg2JUU2JTgyJTk2JUU4JUFFJUJBJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIycGFyYWdyYXBoJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlRTglQTclQTMlRTUlODYlQjMlRTYlODAlOUQlRTglQjclQUYlRTYlOUMlODklRTQlQjglQTQlRTQlQjglQUElM0ElMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bm9yZGVyZWRfbGlzdCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmxpc3RfaXRlbSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnVuc3R5bGVkJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlRTYlODAlOUQlRTglQjclQUYxJTNBJTIwJUU2JTgzJUIzJUU1JThBJTlFJUU2JUIzJTk1JUU1JUFGJUI5JUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU2JUIzJUE4JUU1JTg1JUE1JTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU2JTk4JUFGJUU3JUJCJTk1JUU4JUJGJTg3U3ByaW5nJUU1JThGJUFBJUU4JTgzJUJEJUU4JUJGJTkwJUU4JUExJThDJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU2JTg5JThEJUU4JTgzJUJEJUU2JUIzJUE4JUU1JTg1JUE1JUU0JUJFJTlEJUU4JUI1JTk2JUU3JTlBJTg0JUU1JUEzJTgxJUU1JTlFJTkyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdF9pdGVtJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5zdHlsZWQlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNiU4MCU5RCVFOCVCNyVBRjIlM0ElMjAlRTYlODMlQjMlRTUlOEElOUUlRTYlQjMlOTUlNDBBZnRlckNsYXNzJUU2JTk0JUI5JUU5JTgwJUEwJUU0JUI4JUJBJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5vcmRlcmVkX2xpc3QlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJsaXN0X2l0ZW0lMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bnN0eWxlZCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU1JUFFJTlFJUU3JThFJUIwSnVuaXQlMjBSdW5MaXN0ZW5lciUyQyUyMCVFOCVBNiU4NiVFNyU5QiU5NnRlc3RSdW5GaW5pc2hlZCVFNiU5NiVCOSVFNiVCMyU5NSUyQyUyMCVFOCVCRiU5OSVFOSU4NyU4QyVFNSU4RSVCQiVFNSVBRSU5RSVFNyU4RSVCMCVFNyVCMSVCQiVFNCVCQyVCQyU0MEFmdGVyQ2xhc3MlRTclOUElODQlRTUlOEElOUYlRTglODMlQkQlMkMlMjAlRTglQkYlOTklRTQlQjglQUElRTYlOTYlQjklRTYlQjMlOTUlRTYlOTglQUYlRTklOUQlOUUlRTklOUQlOTklRTYlODAlODElRTclOUElODQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJsaXN0X2l0ZW0lMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bnN0eWxlZCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU0JUI4JThEJUU4JUE2JTgxJUU3JTk0JUE4SnVuaXQlMkMlMjAlRTYlOTQlQjklRTclOTQlQThUZXN0TkclMkMlMjBUZXN0TkclRTklODclOEMlRTclOUElODRBZnRlckNsYXNzJUU2JTk4JUFGJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJUU3JTlBJTg0JTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdF9pdGVtJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5zdHlsZWQlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNyU5NCVBOFNwcmluZyVFNyU5QSU4NFRlc3RFeGVjdXRpb25MaXN0ZW5lcnMlMkMlMjAlRTUlQUUlOUUlRTclOEUlQjAlRTQlQjglQUFMaXN0ZW5lciUyQyUyMCVFOSU4NyU4QyVFOSU5RCVBMiVFNCVCOSU5RiVFNiU5QyU4OSVFNCVCOCVBQSVFNyVCMSVCQiVFNCVCQyVCQyVFOSU5RCU5RSVFOSU5RCU5OSVFNiU4MCU4MSVFNyU5QSU4NEFmdGVyQ2xhc3MlRTclOUElODQlRTUlQUUlOUUlRTclOEUlQjAlMkMlMjAlRTglQTYlODYlRTclOUIlOTYlRTUlQUUlOUUlRTclOEUlQjAlRTUlQjAlQjElRTglQTElOEMlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNiU4MCU5RCVFOCVCNyVBRjIlRTclOUElODQlRTUlODclQTAlRTQlQjglQUElRTYlOTYlQjklRTYlQjMlOTUlRTklODMlQkQlRTUlOEYlQUYlRTQlQkIlQTUlRTUlQUUlOUUlRTclOEUlQjAlMkMlMjAlRTQlQkQlODYlRTYlOTglQUYlRTUlOEQlOTUlRTUlODUlODMlRTYlQjUlOEIlRTglQUYlOTVSdW5uZXIlRTklOUMlODAlRTglQTYlODElRTclOTQlQTglMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlMjJzeW50YXglMjIlM0ElMjJqYXZhJTIyJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9ibG9jayUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTQwUnVuV2l0aChUaGVvcmllcy5jbGFzcyklMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFOCU4MCU4QyVFNCVCOCU5NCVFNiU5NCVCOSVFNyU5NCVBOFRlc3RORyVFNSVCNyVBNSVFNyVBOCU4QiVFNiVCNSVBOSVFNSVBNCVBNyUyQyUyMCVFNSU4RiVBQSVFOCU4MyVCRCVFNiU5NCVCRSVFNSVCQyU4MyVFNiU4RSU4OSVFOCVCRiU5OSVFNCVCOCVBQSVFNiU4MCU5RCVFOCVCNyVBRiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU3JUJCJUE3JUU3JUJCJUFEJUU4JUI1JUIwJUU2JTgwJTlEJUU4JUI3JUFGMSUyQyUyMCVFNSU4RiVBQSVFOCU4MyVCRCVFNSU4RSVCQiVFNyVCQiU5NSVFOCVCRiU4N1NwcmluZyVFNyU5QSU4NCVFNCVCRSU5RCVFOCVCNSU5NiVFNiVCMyVBOCVFNSU4NSVBNSVFNyU5QSU4NHN0YXRpYyVFNSVBMyU4MSVFNSU5RSU5MiVFNCVCQSU4NiUyQyUyMCVFNSU4NSVCNyVFNCVCRCU5MyVFNCVCQiVBMyVFNyVBMCU4MSVFNSVBNiU4MiVFNCVCOCU4QiUzQSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiUyMnN5bnRheCUyMiUzQSUyMmphdmElMjIlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2Jsb2NrJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlNDBBdXRvd2lyZWQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMHByaXZhdGUlMjBEZXN0aW5hdGlvbiUyMGRmc09wZXJhdGlvblF1ZXVlJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjBwcml2YXRlJTIwc3RhdGljJTIwRGVzdGluYXRpb24lMjBkZnNPcGVyYXRpb25RdWV1ZVN0YXRpYyUzQiUyMCUyRiUyRiUyMHN0YXRpYyUyMHZlcnNpb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCU0MEF1dG93aXJlZCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHJpdmF0ZSUyME1lc3NhZ2VRdWV1ZUFQSSUyMG1lc3NhZ2VRdWV1ZUFQSSUzQiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHJpdmF0ZSUyMHN0YXRpYyUyME1lc3NhZ2VRdWV1ZUFQSSUyMG1lc3NhZ2VRdWV1ZUFQSVN0YXRpYyUzQiUyMCUyRiUyRiUyMHN0YXRpYyUyMHZlcnNpb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlNDBQb3N0Q29uc3RydWN0JTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjBwdWJsaWMlMjB2b2lkJTIwaW5pdCgpJTIwJTdCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZnNPcGVyYXRpb25RdWV1ZVN0YXRpYyUyMCUzRCUyMHRoaXMuZGZzT3BlcmF0aW9uUXVldWUlM0IlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lc3NhZ2VRdWV1ZUFQSVN0YXRpYyUyMCUzRCUyMHRoaXMubWVzc2FnZVF1ZXVlQVBJJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlN0QlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTQwQWZ0ZXJDbGFzcyUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHVibGljJTIwc3RhdGljJTIwdm9pZCUyMGFmdGVyQ2xhc3MoKSUyMCU3QiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVzc2FnZVZPJTIwbWVzc2FnZVZPJTIwJTNEJTIwbWVzc2FnZVF1ZXVlQVBJU3RhdGljLnJlbW92ZURlc3RpbmF0aW9uKGRmc09wZXJhdGlvblF1ZXVlU3RhdGljKSUzQiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2VWTyklM0IlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCU3RCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU1JTg1JUI2JUU1JUFFJTlFJUU1JUIwJUIxJUU2JTk4JUFGJUU3JTk0JUE4JUU0JUJBJTg2JTQwUG9zdENvbnN0cnVjdCUyMCVFNiU5RCVBNSVFNCVCOCVBQSVFNSU4MSVCNyVFNiVBMiU4MSVFNiU4RCVBMiVFNiU5RiVCMSVFOCU4MCU4QyVFNSVCNyVCMiUyQyUyMCVFNSVBNCU5QSVFNSVBMyVCMCVFNiU5OCU4RSVFNCVCOCVBQSVFOSU5RCU5OSVFNiU4MCU4MSVFNiU4OCU5MCVFNSU5MSU5OCVFNiU4QyU4NyVFNSU5MCU5MSVFOSU5RCU5RSVFOSU5RCU5OSVFNiU4MCU4MSVFNSVBRiVCOSVFOCVCMSVBMSUyQyUyMCVFNCVCOCVBNCVFOCU4MCU4NSVFNSU4NSVCNiVFNSVBRSU5RSVFNiU5OCVBRiVFNCVCOCU4MCVFNCVCOCVBQSVFNSVBRiVCOSVFOCVCMSVBMSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE" style="box-sizing: border-box; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">S</span>pring默认不允许对类的变量, 也就是静态变量进行注入操作, 但是在某些场景比如单元测试的@AfterClass要访问注入对象, 而Junit的这个方法必须是静态的, 也就产生了悖论;<p data-key="33745" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33744" style="box-sizing: border-box;"><span data-offset-key="33744-0" style="box-sizing: border-box;">解决思路有两个:</span></span></p><ul data-key="33762" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><li style="box-sizing: border-box;"><div data-key="33748" style="box-sizing: border-box;"><div data-key="33747" style="box-sizing: border-box; position: relative;"><span data-key="33746" style="box-sizing: border-box;"><span data-offset-key="33746-0" style="box-sizing: border-box;">思路1: 想办法对静态变量注入, 也就是绕过Spring只能运行非静态变量才能注入依赖的壁垒</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33761" style="box-sizing: border-box;"><div data-key="33750" style="box-sizing: border-box; position: relative;"><span data-key="33749" style="box-sizing: border-box;"><span data-offset-key="33749-0" style="box-sizing: border-box;">思路2: 想办法@AfterClass改造为非静态</span></span></div><ul data-key="33760" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px;"><li style="box-sizing: border-box;"><div data-key="33753" style="box-sizing: border-box;"><div data-key="33752" style="box-sizing: border-box; position: relative;"><span data-key="33751" style="box-sizing: border-box;"><span data-offset-key="33751-0" style="box-sizing: border-box;">实现Junit RunListener, 覆盖testRunFinished方法, 这里去实现类似@AfterClass的功能, 这个方法是非静态的</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33756" style="box-sizing: border-box;"><div data-key="33755" style="box-sizing: border-box; position: relative;"><span data-key="33754" style="box-sizing: border-box;"><span data-offset-key="33754-0" style="box-sizing: border-box;">不要用Junit, 改用TestNG, TestNG里的AfterClass是非静态的</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33759" style="box-sizing: border-box;"><div data-key="33758" style="box-sizing: border-box; position: relative;"><span data-key="33757" style="box-sizing: border-box;"><span data-offset-key="33757-0" style="box-sizing: border-box;">用Spring的TestExecutionListeners, 实现个Listener, 里面也有个类似非静态的AfterClass的实现, 覆盖实现就行</span></span></div></div></li></ul></div></li></ul><p data-key="33764" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33763" style="box-sizing: border-box;"><span data-offset-key="33763-0" style="box-sizing: border-box;">思路2的几个方法都可以实现, 但是单元测试Runner需要用</span></span></p><div style="box-sizing: border-box; position: relative; color: #333333; font-family: Roboto,&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; background-color: #ffffff;"><pre data-key="33767" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; word-break: break-all; word-wrap: break-word; color: #333333; background-color: #f5f5f5; border: 1px solid #f5f5f5; border-radius: 2px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: inherit; background-color: transparent; border-radius: 0px; white-space: pre-wrap;"><div data-key="33766" style="box-sizing: border-box; position: relative;"><span data-key="33765" style="box-sizing: border-box;"><span data-offset-key="33765-0" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@RunWith</span></span><span data-offset-key="33765-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33765-2" style="box-sizing: border-box;">Theories</span><span data-offset-key="33765-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33765-4" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">class</span></span><span data-offset-key="33765-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">)</span></span></span></div></code></pre></div><p data-key="33769" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33768" style="box-sizing: border-box;"><span data-offset-key="33768-0" style="box-sizing: border-box;">而且改用TestNG工程浩大, 只能放弃掉这个思路</span></span></p><p data-key="33771" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33770" style="box-sizing: border-box;"><span data-offset-key="33770-0" style="box-sizing: border-box;">继续走思路1, 只能去绕过Spring的依赖注入的static壁垒了, 具体代码如下:</span></span></p><div style="box-sizing: border-box; position: relative; color: #333333; font-family: Roboto,&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; background-color: #ffffff;"><pre data-key="33810" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; word-break: break-all; word-wrap: break-word; color: #333333; background-color: #f5f5f5; border: 1px solid #f5f5f5; border-radius: 2px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: inherit; background-color: transparent; border-radius: 0px; white-space: pre-wrap;"><div data-key="33773" style="box-sizing: border-box; position: relative;"><span data-key="33772" style="box-sizing: border-box;"> <span data-offset-key="33772-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@Autowired</span></span></span></div><div data-key="33775" style="box-sizing: border-box; position: relative;"><span data-key="33774" style="box-sizing: border-box;"> <span data-offset-key="33774-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span><span data-offset-key="33774-2" style="box-sizing: border-box;"> Destination dfsOperationQueue</span><span data-offset-key="33774-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33777" style="box-sizing: border-box; position: relative;"><span data-key="33776" style="box-sizing: border-box;"> <span data-offset-key="33776-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span> <span data-offset-key="33776-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span><span data-offset-key="33776-4" style="box-sizing: border-box;"> Destination dfsOperationQueueStatic</span><span data-offset-key="33776-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span> <span data-offset-key="33776-7" style="box-sizing: border-box;"><span token="" comment=""  "="" style="box-sizing: border-box; color: #708090;">// static version</span></span></span></div><div data-key="33779" style="box-sizing: border-box; position: relative;"><span data-key="33778" style="box-sizing: border-box;"> <span data-offset-key="33778-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@Autowired</span></span></span></div><div data-key="33781" style="box-sizing: border-box; position: relative;"><span data-key="33780" style="box-sizing: border-box;"> <span data-offset-key="33780-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span><span data-offset-key="33780-2" style="box-sizing: border-box;"> MessageQueueAPI messageQueueAPI</span><span data-offset-key="33780-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33783" style="box-sizing: border-box; position: relative;"><span data-key="33782" style="box-sizing: border-box;"> <span data-offset-key="33782-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span> <span data-offset-key="33782-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span><span data-offset-key="33782-4" style="box-sizing: border-box;"> MessageQueueAPI messageQueueAPIStatic</span><span data-offset-key="33782-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span> <span data-offset-key="33782-7" style="box-sizing: border-box;"><span token="" comment=""  "="" style="box-sizing: border-box; color: #708090;">// static version</span></span></span></div><div data-key="33785" style="box-sizing: border-box; position: relative;"><span data-key="33784" style="box-sizing: border-box;"><span data-offset-key="33784-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33787" style="box-sizing: border-box; position: relative;"><span data-key="33786" style="box-sizing: border-box;"><span data-offset-key="33786-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33789" style="box-sizing: border-box; position: relative;"><span data-key="33788" style="box-sizing: border-box;"> <span data-offset-key="33788-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@PostConstruct</span></span></span></div><div data-key="33791" style="box-sizing: border-box; position: relative;"><span data-key="33790" style="box-sizing: border-box;"> <span data-offset-key="33790-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">public</span></span> <span data-offset-key="33790-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">void</span></span> <span data-offset-key="33790-5" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">init</span></span><span data-offset-key="33790-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">()</span></span> <span data-offset-key="33790-8" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">{</span></span></span></div><div data-key="33793" style="box-sizing: border-box; position: relative;"><span data-key="33792" style="box-sizing: border-box;"><span data-offset-key="33792-0" style="box-sizing: border-box;">        dfsOperationQueueStatic </span><span data-offset-key="33792-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span> <span data-offset-key="33792-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">this</span></span><span data-offset-key="33792-4" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33792-5" style="box-sizing: border-box;">dfsOperationQueue</span><span data-offset-key="33792-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33795" style="box-sizing: border-box; position: relative;"><span data-key="33794" style="box-sizing: border-box;"><span data-offset-key="33794-0" style="box-sizing: border-box;">        messageQueueAPIStatic </span><span data-offset-key="33794-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span> <span data-offset-key="33794-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">this</span></span><span data-offset-key="33794-4" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33794-5" style="box-sizing: border-box;">messageQueueAPI</span><span data-offset-key="33794-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33797" style="box-sizing: border-box; position: relative;"><span data-key="33796" style="box-sizing: border-box;"> <span data-offset-key="33796-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">}</span></span></span></div><div data-key="33799" style="box-sizing: border-box; position: relative;"><span data-key="33798" style="box-sizing: border-box;"><span data-offset-key="33798-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33801" style="box-sizing: border-box; position: relative;"><span data-key="33800" style="box-sizing: border-box;"> <span data-offset-key="33800-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@AfterClass</span></span></span></div><div data-key="33803" style="box-sizing: border-box; position: relative;"><span data-key="33802" style="box-sizing: border-box;"> <span data-offset-key="33802-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">public</span></span> <span data-offset-key="33802-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span> <span data-offset-key="33802-5" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">void</span></span> <span data-offset-key="33802-7" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">afterClass</span></span><span data-offset-key="33802-8" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">()</span></span> <span data-offset-key="33802-10" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">{</span></span></span></div><div data-key="33805" style="box-sizing: border-box; position: relative;"><span data-key="33804" style="box-sizing: border-box;"><span data-offset-key="33804-0" style="box-sizing: border-box;">        MessageVO messageVO </span><span data-offset-key="33804-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span><span data-offset-key="33804-2" style="box-sizing: border-box;"> messageQueueAPIStatic</span><span data-offset-key="33804-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33804-4" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">removeDestination</span></span><span data-offset-key="33804-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33804-6" style="box-sizing: border-box;">dfsOperationQueueStatic</span><span data-offset-key="33804-7" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">);</span></span></span></div><div data-key="33807" style="box-sizing: border-box; position: relative;"><span data-key="33806" style="box-sizing: border-box;"><span data-offset-key="33806-0" style="box-sizing: border-box;">        System</span><span data-offset-key="33806-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33806-2" style="box-sizing: border-box;">out</span><span data-offset-key="33806-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33806-4" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">println</span></span><span data-offset-key="33806-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33806-6" style="box-sizing: border-box;">messageVO</span><span data-offset-key="33806-7" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">);</span></span></span></div><div data-key="33809" style="box-sizing: border-box; position: relative;"><span data-key="33808" style="box-sizing: border-box;"> <span data-offset-key="33808-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">}</span></span></span></div></code></pre></div><p data-key="33812" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33811" style="box-sizing: border-box;"><span data-offset-key="33811-0" style="box-sizing: border-box;">其实就是用了@PostConstruct 来个偷梁换柱而已, 多声明个静态成员指向非静态对象, 两者其实是一个对象</span></span></p></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/432461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2017-04-15 10:32 <a href="http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过rest api管理activemq</title><link>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Sat, 22 Oct 2016 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/431914.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/431914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/431914.html</trackback:ping><description><![CDATA[<div><p>知道activemq现在已经支持了rest api, 但是官方对这部分的介绍一笔带过 (http://activemq.apache.org/rest.html), <br /></p><p><br /></p><p>通过google居然也没搜到一些有用的, 比如像删除一个destination, 都是问的多,然后没下文. 于是花了一些心思研究了一下:</p><p><br /></p><p>首先通过rest api获取当前版本所有已支持的协议</p><p>&nbsp;&nbsp;&nbsp; http://172.30.43.206:8161/api/jolokia/list</p><p><br /></p><p>然后根据json输出关于removeTopic, removeQueue的mbean实现通过rest api删除destination的方法, 注意到用GET请求而不是POST,不然会报错 (官网的例子里用的wget给的灵感, 开始用了POST老报错)<br /></p><p><br /></p><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 />--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.activemq.command.ActiveMQQueue;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.activemq.command.ActiveMQTopic;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.auth.AuthScope;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.auth.UsernamePasswordCredentials;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.impl.client.BasicCredentialsProvider;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.impl.client.DefaultHttpClient;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpEntity;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpHeaders;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpMethod;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.MediaType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.ResponseEntity;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.client.ClientHttpRequestFactory;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.client.HttpComponentsClientHttpRequestFactory;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.client.RestTemplate;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.jms.Destination;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.jms.JMSException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.Arrays;<br /><br /></span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MessageQueueAdmin&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;RestTemplate&nbsp;restTemplate&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;getRestTemplate(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">admin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">admin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;brokerHost&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">172.30.43.206</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;adminConsolePort&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">8161</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;protocol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;removeDestination(Destination&nbsp;destination)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;destName,&nbsp;destType;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(destination&nbsp;</span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; ">&nbsp;ActiveMQQueue)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;((ActiveMQQueue)&nbsp;destination).getQueueName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destType&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Queue</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;((ActiveMQTopic)&nbsp;destination).getTopicName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destType&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Topic</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;build&nbsp;urls</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s://%s:%s/api/jolokia/exec/org.apache.activemq:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">brokerName=localhost,type=Broker/remove%s/%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;protocol,&nbsp;brokerHost,&nbsp;adminConsolePort,&nbsp;destType,&nbsp;destName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;do&nbsp;operation</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpHeaders&nbsp;headers&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpHeaders();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;entity&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpEntity</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">parameters</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;headers);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseEntity&nbsp;response&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;restTemplate.exchange(url,&nbsp;HttpMethod.GET,&nbsp;entity,&nbsp;String.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(response.getBody());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveMQTopic&nbsp;topic&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ActiveMQTopic(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">test-activemq-topic</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeDestination(topic);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;RestTemplate&nbsp;getRestTemplate(String&nbsp;user,&nbsp;String&nbsp;password)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultHttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BasicCredentialsProvider&nbsp;credentialsProvider&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicCredentialsProvider();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;credentialsProvider.setCredentials(AuthScope.ANY,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;UsernamePasswordCredentials(user,&nbsp;password));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpClient.setCredentialsProvider(credentialsProvider);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientHttpRequestFactory&nbsp;rf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpComponentsClientHttpRequestFactory(httpClient);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;RestTemplate(rf);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><br /><p>其他的请求,应该都是类似jolokia的exec get request的格式:</p><p><br /></p><p><div>https://jolokia.org/reference/html/protocol.html#exec</div></p><p><br /></p><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 />--><span style="color: #000000; ">&lt;base&nbsp;url&gt;/exec/&lt;mbean&nbsp;name&gt;/&lt;operation&nbsp;name&gt;/&lt;arg1&gt;/&lt;arg2&gt;/<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span></div></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/431914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-10-22 17:31 <a href="http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JmsTemplate CLIENT_ACKNOWLEDGE 模式下receive消息的问题</title><link>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 12 Oct 2016 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/431885.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/431885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/431885.html</trackback:ping><description><![CDATA[用Spring JMS 的JmsTemplate从消息队列消费消息时发现，使用了CLIENT_ACKNOWLEDGE模式，消息返回后总是自动被ack，也就是被broker "Dequeued"<br /><br /><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 />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;Message&nbsp;doReceive(Session&nbsp;session,&nbsp;MessageConsumer&nbsp;consumer)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Use&nbsp;transaction&nbsp;timeout&nbsp;(if&nbsp;available).</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;timeout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;getReceiveTimeout();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsResourceHolder&nbsp;resourceHolder&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(JmsResourceHolder)&nbsp;TransactionSynchronizationManager.getResource(getConnectionFactory());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(resourceHolder&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;resourceHolder.hasTimeout())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Math.min(timeout,&nbsp;resourceHolder.getTimeToLiveInMillis());<br />&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;Message&nbsp;message&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;doReceive(consumer,&nbsp;timeout);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(session.getTransacted())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Commit&nbsp;necessary&nbsp;-&nbsp;but&nbsp;avoid&nbsp;commit&nbsp;call&nbsp;within&nbsp;a&nbsp;JTA&nbsp;transaction.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(isSessionLocallyTransacted(session))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Transacted&nbsp;session&nbsp;created&nbsp;by&nbsp;this&nbsp;template&nbsp;-&gt;&nbsp;commit.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsUtils.commitIfNecessary(session);<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(isClientAcknowledge(session))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Manually&nbsp;acknowledge&nbsp;message,&nbsp;if&nbsp;any.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(message&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.acknowledge();<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;message;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsUtils.closeMessageConsumer(consumer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div><br />但是使用异步listener 就不会出现这个情况，搜了下google，发现果然存在这个问题<br /><br /><div>&nbsp;&nbsp;&nbsp;&nbsp; https://jira.spring.io/browse/SPR-12995<br />&nbsp;&nbsp;&nbsp;&nbsp; https://jira.spring.io/browse/SPR-13255<br />&nbsp;&nbsp;&nbsp;&nbsp; http://louisling.iteye.com/blog/241073</div><br />同步方式拉取消息，暂时没找到好的封装，只能暂时用这。或者尽量用listener, 这个问题暂时标记下，或者谁有更好的解决方案可以comment我<img src ="http://www.blogjava.net/miaoyachun/aggbug/431885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-10-12 16:32 <a href="http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树莓派3B完美匹配DELL P2014H的配置</title><link>http://www.blogjava.net/miaoyachun/archive/2016/06/15/430904.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 15 Jun 2016 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/06/15/430904.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430904.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/06/15/430904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430904.html</trackback:ping><description><![CDATA[<div>默认的配置有时候点不亮显示器，且分辨率很低，通过tvservice工具不断调试，发现下面的参数可以完美匹配了<br />修改 /boot/config.txt的下列参数</div><br /><div> <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"><span style="color: #000000; ">disable_overscan</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />hdmi_force_hotplug</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />hdmi_group</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />hdmi_mode</span><span style="color: #000000; ">=</span><span style="color: #000000; ">16</span><span style="color: #000000; "><br />hdmi_drive</span><span style="color: #000000; ">=</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br />config_hdmi_boost</span><span style="color: #000000; ">=</span><span style="color: #000000; ">4</span><span style="color: #000000; "><br />dtparam</span><span style="color: #000000; ">=</span><span style="color: #000000; ">audio</span><span style="color: #000000; ">=</span><span style="color: #000000; ">on<br /></span></div> </div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/430904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-06-15 09:32 <a href="http://www.blogjava.net/miaoyachun/archive/2016/06/15/430904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中classpath与classpath*的区别</title><link>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 26 May 2016 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430666.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430666.html</trackback:ping><description><![CDATA[<div><div>http://stackoverflow.com/questions/3294423/spring-classpath-prefix-difference</div><br /><br /><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"><span style="color: #000000; "><br />&nbsp;&nbsp; <br /><br />SIMPLE&nbsp;DEFINITION<br /><br />The&nbsp;classpath*:conf/appContext.xml&nbsp;simply&nbsp;means&nbsp;that&nbsp;all&nbsp;appContext.xml&nbsp;files&nbsp;under&nbsp;conf&nbsp;folders&nbsp;in&nbsp;all&nbsp;your&nbsp;jars&nbsp;on&nbsp;the&nbsp;classpath&nbsp;will&nbsp;be&nbsp;picked&nbsp;up&nbsp;and&nbsp;joined&nbsp;into&nbsp;one&nbsp;big&nbsp;application&nbsp;context.<br /><br />In&nbsp;contrast</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;classpath:conf/appContext.xml&nbsp;will&nbsp;load&nbsp;only&nbsp;one&nbsp;such&nbsp;file<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&nbsp;the&nbsp;first&nbsp;one&nbsp;found&nbsp;on&nbsp;your&nbsp;classpath.<br /></span></div> </div><br /><br /><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 />--><div><pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:9.8pt;"><span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">bean </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;">id</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="propertyConfigurer"<br /></span> <span style="color:#0000ff;background-color:#efefef;font-weight:bold;">class</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span><span style="background-color:#efefef;">&gt;</span><br />   <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">property </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;">name</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="locations"</span><span style="background-color:#efefef;">&gt;</span><br />      <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">&gt;</span><br />         <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span>classpath:*.properties<span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span><br />         <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span>classpath*:*.properties<span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span><br />      <span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">&gt;</span><br />   <span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">property</span><span style="background-color:#efefef;">&gt;</span><br /><span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">bean</span><span style="background-color:#efefef;">&gt;</span></pre></div></div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/430666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-05-26 14:14 <a href="http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>When launched from .exe IDEA looks for Java in a following order</title><link>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Mon, 16 May 2016 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430516.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430516.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 />--><div>  <ol><li>IDEA_JDK (or IDEA_JDK_64) environment variable</li><li>jre/ (or jre64/) directory in IDEA home</li><li>registry</li><li>JDK_HOME environment variable</li><li>JAVA_HOME environment variable</li></ol></div></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/430516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-05-16 08:49 <a href="http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java修改stdout的历史输出</title><link>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 21 Apr 2016 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430179.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430179.html</trackback:ping><description><![CDATA[java里如何修改console的历史输出信息呢？如果是当前行的修改可以简单想到"\r"的方案，但是如果要修改上一行呢? google了下原来还是有方法的，需要用到ansi的control sequences<br /><a title="ANSI code" href="http://www.real-world-systems.com/docs/ANSIcode.html">ANSI code</a><br /><br />用java写了个简单的例子，例子就是把曾经的output修改为其他字符串并恢复之后的打印，代码里加了sleep，主要方便理解各种控制序列的含义<br /><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 />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">print&nbsp;some&nbsp;test&nbsp;messages</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">22</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">333</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">4444</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;modify&nbsp;"333"&nbsp;to&nbsp;"-"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;up&nbsp;two&nbsp;lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[%dA</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Erase&nbsp;current&nbsp;line&nbsp;content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[2K</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;update&nbsp;with&nbsp;new&nbsp;content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;down&nbsp;two&nbsp;lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[%dB</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;cursor&nbsp;to&nbsp;left&nbsp;beginning</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[D</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;continue&nbsp;print&nbsp;others</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">55555</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);</span></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/430179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-04-21 17:06 <a href="http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zookeeper学习</title><link>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 31 Mar 2016 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429913.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429913.html</trackback:ping><description><![CDATA[1. zookeeper basic/fast paxsos 的形象表述 https://www.douban.com/note/208430424/<br />2. 详细介绍 http://blog.csdn.net/xhh198781/article/details/10949697<img src ="http://www.blogjava.net/miaoyachun/aggbug/429913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-03-31 14:06 <a href="http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring boot 开启reponse压缩以及部分参数设置</title><link>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Tue, 29 Mar 2016 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429861.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429861.html</trackback:ping><description><![CDATA[<div><pre style="background-color: #ffffff; color: #000000; font-family: &quot;DejaVu Sans Mono&quot;; font-size: 9pt;"><span style="color:#000080;background-color:#e4e4ff;font-weight:bold;">server.compression.enabled</span>=<span style="color:#008000;font-weight:bold;">true <br /></span><span style="color:#000080;font-weight:bold;">server.compression.mime-types</span>=<span style="color:#008000;font-weight:bold;">application/json,application/xml,text/html,text/xml,text/plain<br /></span><span style="color:#000080;font-weight:bold;">server.compression.min-response-size</span>=<span style="color:#008000;font-weight:bold;">4096</span></pre></div>第一个参数打开压缩开关，第二个参数添加json reponse（尤其是为rest api）,第三个参数是根据reponse的大小设置启用压缩的最小值(默认是2K，自己根据实际情况调整)<br /><br />参考<div>http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#how-to-enable-http-response-compression</div><img src ="http://www.blogjava.net/miaoyachun/aggbug/429861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-03-29 11:50 <a href="http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>