??xml version="1.0" encoding="utf-8" standalone="yes"?>久久青青草原亚洲AV无码麻豆 ,亚洲一区二区精品视频,亚洲国产婷婷香蕉久久久久久http://www.tkk7.com/miaoyachun/category/50699.htmlzh-cnFri, 08 Dec 2017 06:50:38 GMTFri, 08 Dec 2017 06:50:38 GMT60Spring boot外部配置-配置中心?/title><link>http://www.tkk7.com/miaoyachun/archive/2017/12/08/432940.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Fri, 08 Dec 2017 06:13:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2017/12/08/432940.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/432940.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2017/12/08/432940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/432940.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/432940.html</trackback:ping><description><![CDATA[在Spring cloud config出来之前, 自己实现了基于ZK的配|中? 杜绝了本地properties配置文g, 原理很简? 只是重蝲了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 propertiesQ?然后q入ZK配置中心d的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<String<span style="color:#cc7832;">, </span>String> 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 />q个实现在spring目里用hq是挺顺手的, 但是q期部分spring-boot目里发现这Uplaceholder的实现跟spring boot的@ConfigurationProperties(prefix = "xxx") 不能很好的配合工?<br />也就是属性没有被resolve处理, 用@Value的方式确可以d, 但是@Value配置h如果属性多的话q是挺繁琐的, q是們֐用@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; ">   * Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).<br />   * @TestPropertySource annotations on your tests.<br />   * @SpringBootTest#properties annotation attribute on your tests.<br />   * Command line arguments.<br />   * Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)<br />   * ServletConfig init parameters.<br />   * ServletContext init parameters.<br />   * JNDI attributes from java:comp/env.<br />   * Java System properties (System.getProperties()).<br />   * OS environment variables.<br />   * A RandomValuePropertySource that only has properties in random.*.<br />   * Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)<br />   * Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)<br />   * Application properties outside of your packaged jar (application.properties and YAML variants).<br />   * Application properties packaged inside your jar (application.properties and YAML variants).<br />   * @PropertySource annotations on your @Configuration classes.<br />   * Default properties (specified using SpringApplication.setDefaultProperties).</span></div></div><div></div>不难发现其会查Java system propeties里的属? 也就是说, 只要把mergerPropertiesd的属性写入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;"> * Ҏ选项, 军_是否合q后的props写入pȝ属? 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;"> // 写入到系l属?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<?> 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>为避免媄响过? 讄了个开? 是否写入pȝ属? 如果是spring boot的项? 开? q样对线上非spring boot目做到影响最? 然后spring boot的@ConfigurationProperties完美d属?<br /><br />具体代码? org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor<br /><br /><div><pre style="background-color: #2b2b2b; color: #a9b7c6; font-family: "宋体"; 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.tkk7.com/miaoyachun/aggbug/432940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2017-12-08 14:13 <a href="http://www.tkk7.com/miaoyachun/archive/2017/12/08/432940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit @AfterClass讉K注入对象的方?/title><link>http://www.tkk7.com/miaoyachun/archive/2017/04/15/432461.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Sat, 15 Apr 2017 02:32:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2017/04/15/432461.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/432461.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2017/04/15/432461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/432461.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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, "Helvetica Neue", 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默认不允许对cȝ变量, 也就是静态变量进行注入操? 但是在某些场景比如单元测试的@AfterClass要访问注入对? 而Junit的这个方法必L静态的, 也就产生了悖?<p data-key="33745" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, "Helvetica Neue", 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, "Helvetica Neue", 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: 惛_法对静态变量注? 也就是绕qSpring只能q行非静态变量才能注入依赖的壁垒</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攚wؓ非静?/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Ҏ, q里d现类似@AfterClass的功? q个Ҏ是非静态的</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的实? 覆盖实现p</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, "Helvetica Neue", 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,"Helvetica Neue",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, "Courier New", 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, "Courier New", 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, "Helvetica Neue", 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, "Helvetica Neue", 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;">l箋走思\1, 只能ȝqSpring的依赖注入的static壁垒? 具体代码如下:</span></span></p><div style="box-sizing: border-box; position: relative; color: #333333; font-family: Roboto,"Helvetica Neue",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, "Courier New", 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, "Courier New", 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, "Helvetica Neue", 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 来个h换柱而已, 多声明个静态成员指向非静态对? 两者其实是一个对?/span></span></p></div><img src ="http://www.tkk7.com/miaoyachun/aggbug/432461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2017-04-15 10:32 <a href="http://www.tkk7.com/miaoyachun/archive/2017/04/15/432461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过rest api理activemqhttp://www.tkk7.com/miaoyachun/archive/2016/10/22/431914.htmlMilo的v?/dc:creator>Milo的v?/author>Sat, 22 Oct 2016 09:31:00 GMThttp://www.tkk7.com/miaoyachun/archive/2016/10/22/431914.htmlhttp://www.tkk7.com/miaoyachun/comments/431914.htmlhttp://www.tkk7.com/miaoyachun/archive/2016/10/22/431914.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/431914.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/431914.html

知道activemq现在已经支持了rest api, 但是官方对这部分的介l一W带q?(http://activemq.apache.org/rest.html),


通过google居然也没搜到一些有用的, 比如像删除一个destination, 都是问的?然后没下? 于是׃一些心思研I了一?


首先通过rest api获取当前版本所有已支持的协?/p>

    http://172.30.43.206:8161/api/jolokia/list


然后Ҏjson输出关于removeTopic, removeQueue的mbean实现通过rest api删除destination的方? 注意到用GETh而不是POST,不然会报?(官网的例子里用的wgetl的灉|, 开始用了POST老报?


import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import javax.jms.Destination;
import javax.jms.JMSException;
import java.util.Arrays;


public class MessageQueueAdmin {
    
private static final RestTemplate restTemplate = getRestTemplate("admin""admin");

    
private static String brokerHost = "172.30.43.206";
    
private static String adminConsolePort = "8161";
    
private static String protocol = "http";

    
public static void removeDestination(Destination destination) throws JMSException {
        String destName, destType;
        
if (destination instanceof ActiveMQQueue) {
            destName 
= ((ActiveMQQueue) destination).getQueueName();
            destType 
= "Queue";
        } 
else {
            destName 
= ((ActiveMQTopic) destination).getTopicName();
            destType 
= "Topic";
        }

        
// build urls
        String url = String.format("%s://%s:%s/api/jolokia/exec/org.apache.activemq:" +
                
"brokerName=localhost,type=Broker/remove%s/%s", protocol, brokerHost, adminConsolePort, destType, destName);
        System.out.println(url);
        
// do operation
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        HttpEntity
<String> entity = new HttpEntity<String>("parameters", headers);
        ResponseEntity response 
= restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
        System.out.println(response.getBody());
    }

    
public static void main(String[] args) throws JMSException {
        ActiveMQTopic topic 
= new ActiveMQTopic("test-activemq-topic");
        removeDestination(topic);
    }


    
private static RestTemplate getRestTemplate(String user, String password) {
        DefaultHttpClient httpClient 
= new DefaultHttpClient();
        BasicCredentialsProvider credentialsProvider 
= new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, 
new UsernamePasswordCredentials(user, password));
        httpClient.setCredentialsProvider(credentialsProvider);
        ClientHttpRequestFactory rf 
= new HttpComponentsClientHttpRequestFactory(httpClient);

        
return new RestTemplate(rf);
    }
}

其他的请?应该都是cMjolokia的exec get request的格?


https://jolokia.org/reference/html/protocol.html#exec


<base url>/exec/<mbean name>/<operation name>/<arg1>/<arg2>/.


]]>
JmsTemplate CLIENT_ACKNOWLEDGE 模式下receive消息的问?/title><link>http://www.tkk7.com/miaoyachun/archive/2016/10/12/431885.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Wed, 12 Oct 2016 08:32:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2016/10/12/431885.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/431885.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2016/10/12/431885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/431885.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/431885.html</trackback:ping><description><![CDATA[用Spring JMS 的JmsTemplate从消息队列消Ҏ息时发现Q用了CLIENT_ACKNOWLEDGE模式Q消息返回后L自动被ackQ也是被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; ">    </span><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> Message doReceive(Session session, MessageConsumer consumer) </span><span style="color: #0000FF; ">throws</span><span style="color: #000000; "> JMSException {<br />        </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />            </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Use transaction timeout (if available).</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">            </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> timeout </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getReceiveTimeout();<br />            JmsResourceHolder resourceHolder </span><span style="color: #000000; ">=</span><span style="color: #000000; "><br />                    (JmsResourceHolder) TransactionSynchronizationManager.getResource(getConnectionFactory());<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (resourceHolder </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; "> </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> resourceHolder.hasTimeout()) {<br />                timeout </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Math.min(timeout, resourceHolder.getTimeToLiveInMillis());<br />            }<br />            Message message </span><span style="color: #000000; ">=</span><span style="color: #000000; "> doReceive(consumer, timeout);<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (session.getTransacted()) {<br />                </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Commit necessary - but avoid commit call within a JTA transaction.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (isSessionLocallyTransacted(session)) {<br />                    </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Transacted session created by this template -> commit.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">                    JmsUtils.commitIfNecessary(session);<br />                }<br />            }<br />            </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (isClientAcknowledge(session)) {<br />                </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Manually acknowledge message, if any.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (message </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">) {<br />                    message.acknowledge();<br />                }<br />            }<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> message;<br />        }<br />        </span><span style="color: #0000FF; ">finally</span><span style="color: #000000; "> {<br />            JmsUtils.closeMessageConsumer(consumer);<br />        }<br />    }<br /></span></div><br />但是使用异步listener ׃会出现这个情况,搜了下googleQ发现果然存在这个问?br /><br /><div>     https://jira.spring.io/browse/SPR-12995<br />     https://jira.spring.io/browse/SPR-13255<br />     http://louisling.iteye.com/blog/241073</div><br />同步方式拉取消息Q暂时没扑ֈ好的装Q只能暂时用q。或者尽量用listener, q个问题暂时标记下,或者谁有更好的解决Ҏ可以comment?img src ="http://www.tkk7.com/miaoyachun/aggbug/431885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2016-10-12 16:32 <a href="http://www.tkk7.com/miaoyachun/archive/2016/10/12/431885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中classpath与classpath*的区?/title><link>http://www.tkk7.com/miaoyachun/archive/2016/05/26/430666.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Thu, 26 May 2016 06:14:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2016/05/26/430666.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/430666.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2016/05/26/430666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/430666.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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 />   <br /><br />SIMPLE DEFINITION<br /><br />The classpath*:conf/appContext.xml simply means that all appContext.xml files under conf folders in all your jars on the classpath will be picked up and joined into one big application context.<br /><br />In contrast</span><span style="color: #000000; ">,</span><span style="color: #000000; "> classpath:conf/appContext.xml will load only one such file<img src="http://www.tkk7.com/Images/dot.gif" alt="" /> the first one found on your 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;"><</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;">></span><br /> <span style="background-color:#efefef;"><</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;">></span><br /> <span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">></span><br /> <span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">></span>classpath:*.properties<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">></span><br /> <span style="background-color:#efefef;"><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">></span>classpath*:*.properties<span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">></span><br /> <span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">></span><br /> <span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">property</span><span style="background-color:#efefef;">></span><br /><span style="background-color:#efefef;"></</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">bean</span><span style="background-color:#efefef;">></span></pre></div></div><br /><img src ="http://www.tkk7.com/miaoyachun/aggbug/430666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2016-05-26 14:14 <a href="http://www.tkk7.com/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 orderhttp://www.tkk7.com/miaoyachun/archive/2016/05/16/430516.htmlMilo的v?/dc:creator>Milo的v?/author>Mon, 16 May 2016 00:49:00 GMThttp://www.tkk7.com/miaoyachun/archive/2016/05/16/430516.htmlhttp://www.tkk7.com/miaoyachun/comments/430516.htmlhttp://www.tkk7.com/miaoyachun/archive/2016/05/16/430516.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/430516.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/430516.html
  1. IDEA_JDK (or IDEA_JDK_64) environment variable
  2. jre/ (or jre64/) directory in IDEA home
  3. registry
  4. JDK_HOME environment variable
  5. JAVA_HOME environment variable


]]>
java修改stdout的历史输?/title><link>http://www.tkk7.com/miaoyachun/archive/2016/04/21/430179.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Thu, 21 Apr 2016 09:06:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2016/04/21/430179.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/430179.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2016/04/21/430179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/430179.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/430179.html</trackback:ping><description><![CDATA[java里如何修改console的历史输Z息呢Q如果是当前行的修改可以单想?\r"的方案,但是如果要修改上一行呢? google了下原来q是有方法的Q需要用到ansi的control sequences<br /><a title="ANSI code" >ANSI code</a><br /><br />用java写了个简单的例子Q例子就是把曄的output修改为其他字W串q恢复之后的打印Q代码里加了sleepQ主要方便理解各U控制序列的含义<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; ">        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">print some test messages</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br /><br />        </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />         * modify "333" to "-"<br />         </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Move up two lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> count </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />        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; ">, count));<br />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Erase current line content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> update with new content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Move down two lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        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; ">, count));<br />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Move cursor to left beginning</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        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; ">, count));<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> continue print others</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />        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 />        Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);</span></div><img src ="http://www.tkk7.com/miaoyachun/aggbug/430179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2016-04-21 17:06 <a href="http://www.tkk7.com/miaoyachun/archive/2016/04/21/430179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zookeeper学习http://www.tkk7.com/miaoyachun/archive/2016/03/31/429913.htmlMilo的v?/dc:creator>Milo的v?/author>Thu, 31 Mar 2016 06:06:00 GMThttp://www.tkk7.com/miaoyachun/archive/2016/03/31/429913.htmlhttp://www.tkk7.com/miaoyachun/comments/429913.htmlhttp://www.tkk7.com/miaoyachun/archive/2016/03/31/429913.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/429913.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/429913.html2. 详细介绍 http://blog.csdn.net/xhh198781/article/details/10949697

]]>
Spring boot 开启reponse压羃以及部分参数讄http://www.tkk7.com/miaoyachun/archive/2016/03/29/429861.htmlMilo的v?/dc:creator>Milo的v?/author>Tue, 29 Mar 2016 03:50:00 GMThttp://www.tkk7.com/miaoyachun/archive/2016/03/29/429861.htmlhttp://www.tkk7.com/miaoyachun/comments/429861.htmlhttp://www.tkk7.com/miaoyachun/archive/2016/03/29/429861.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/429861.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/429861.html
server.compression.enabled=true 
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
server.compression.min-response-size=4096
W一个参数打开压羃开养IW二个参数添加json reponseQ尤其是为rest apiQ?W三个参数是Ҏreponse的大设|启用压~的最?默认?KQ自己根据实际情况调?

参?div>http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#how-to-enable-http-response-compression

]]>
关于java默认的类加蝲器的单代码研I?/title><link>http://www.tkk7.com/miaoyachun/archive/2016/03/16/429685.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Wed, 16 Mar 2016 07:40:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2016/03/16/429685.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/429685.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2016/03/16/429685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/429685.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/429685.html</trackback:ping><description><![CDATA[1. 默认?个classloader: BootstrapClassloader (Native实现)Q?ExtClassloader, AppClassloader (Java实现)<br />2. 3个加载器q不是真正的父子l承关系Q而是逻辑上的QJVM启动先创建ExtClassloader instanceQ然后构造AppClassloader的时候传入ExtClassloader实例作ؓparent<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; ">        Launcher.ExtClassLoader extcl;<br />        </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />            extcl </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Launcher.ExtClassLoader.getExtClassLoader();<br />        } </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (IOException var10) {<br />            </span><span style="color: #0000FF; ">throw</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InternalError(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Could not create extension class loader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, var10);<br />        }<br /><br />        </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />            </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.loader </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Launcher.AppClassLoader.getAppClassLoader(extcl);<br />        } </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (IOException var9) {<br />            </span><span style="color: #0000FF; ">throw</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InternalError(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Could not create application class loader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, var9);<br />        }</span></div><br />关于双亲委派原理Q?在加载类的时候,会看看parent有没有设定,如果讑֮?p用parent.loadClassҎQ如果没讑֮(==null)也就是parent应该是BootstrapClassloader, 会调用native的findBootstrapClass来加载类Q代码:<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; ">                </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />                    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.parent </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">) {<br />                        c </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.parent.loadClass(name, </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br />                    } </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />                        c </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.findBootstrapClassOrNull(name);<br />                    }<br />                } </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (ClassNotFoundException var10) {<br />                    ;<br />                }<br /></span></div><br />目的是按照一定优先别装载系l的libQ系lext目录的libQ以及classpath的libQ防止系l的默认行ؓ或者类的实现被修改?br /><br />3. java cȝ动态加?br /><div>Java内置的ClassLoaderM在加载一个Class之前查这个Class是否已经被加载过Q已l被加蝲q的Class不会加蝲W二ơ。因此要想重新加载ClassQ我们需要实现自qClassLoader?<br />另外一个问题是Q每个被加蝲的Class都需要被链接(link)Q这是通过执行ClassLoader.resolve()来实现的Q这个方法是 final的,因此无法重写。Resove()Ҏ不允怸个ClassLoader实例link一个Class两次Q因此,当你需要重新加载一? Class的时候,你需要重新New一个你自己的ClassLoader实例?</div><img src ="http://www.tkk7.com/miaoyachun/aggbug/429685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2016-03-16 15:40 <a href="http://www.tkk7.com/miaoyachun/archive/2016/03/16/429685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目中用到的一些maven插gȝhttp://www.tkk7.com/miaoyachun/archive/2016/01/26/429206.htmlMilo的v?/dc:creator>Milo的v?/author>Tue, 26 Jan 2016 03:41:00 GMThttp://www.tkk7.com/miaoyachun/archive/2016/01/26/429206.htmlhttp://www.tkk7.com/miaoyachun/comments/429206.htmlhttp://www.tkk7.com/miaoyachun/archive/2016/01/26/429206.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/429206.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/429206.html


maven-shade-plugin 用来打可执行jar包, 可以把所有依赖的三方库都包括q来
exec-maven-plugin 可以执行外部命oQ?nbsp;在项目中对python代码q行~译Q?nbsp;配合maven-assembly-plugin来生成package
maven-assembly-plugin 用来构徏目发行包, 要配合xml配置文g来组l包的结构,基本思\是从build环境copy到outputDirectory
license-maven-plugin 用来生成目用到?方库的版权汇?nbsp;或者其他的一些用?br />maven-dependency-plugin 用来生成目库之间的依赖关系
appassembler-maven-plugin 可以为项目生成优雅的启动脚本 支持linux/win
rpm-maven-plugin 用来为项目构建rpm安装?br />maven-compiler-plugin 指定目的jdk的编译兼容版本以及encodingcd


]]>
Idea q程调式遇到使用exec maven 插g不能命中断点的问?/title><link>http://www.tkk7.com/miaoyachun/archive/2015/10/21/427858.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Wed, 21 Oct 2015 09:12:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2015/10/21/427858.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/427858.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2015/10/21/427858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/427858.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/427858.html</trackback:ping><description><![CDATA[目用mvn exec:exec指o来启动server, 工作中需要调式server初始化的q程, 很容易想到mvnDebug, 但是发现讄的断炚w没有hit, 反复调式多次都是如此,折腾?个多时, H然看到stackoverflow 上有exec:exec是独立进E模? mvnDebug的一些debug选项都被appendC父进E了. idea讄断点qq卵?<br /><br />知道了问题所在解军_Ҏ? 只要修改pom.xml, 然后直接mvn exec:execp正常调式?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; ">            <build><br />                <plugins><br />                    <plugin><br />                        <groupId>org.codehaus.mojo</groupId><br />                        <artifactId>exec-maven-plugin</artifactId><br />                        <version>${mvnexec.version}</version><br />                        <executions><br />                            <execution><br />                                <goals><br />                                    <goal>exec</goal><br />                                </goals><br />                            </execution><br />                        </executions><br />                        <configuration><br />                            <includeProjectDependencies>true</includeProjectDependencies><br />                            <executable>java</executable><br />                            <workingDirectory>${basedir}/config/sim</workingDirectory><br />                            <classpathScope>runtime</classpathScope><br />                            <arguments><br />                                <argument>-agentlib:jdwp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">transport</span><span style="color: #000000; ">=</span><span style="color: #000000; ">dt_socket</span><span style="color: #000000; ">,</span><span style="color: #000000; ">server</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y</span><span style="color: #000000; ">,</span><span style="color: #000000; ">suspend</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y</span><span style="color: #000000; ">,</span><span style="color: #000000; ">address</span><span style="color: #000000; ">=</span><span style="color: #000000; ">4000</span><span style="color: #000000; "></argument><br />                                <argument>-classpath</argument><br />                                <classpath/><br />                                <argument>com.ymiao.Main</argument><br />                                <argument>server</argument><br />                                <argument>${basedir}/config/sim/sim.yml</argument><br />                            </arguments><br />                        </configuration><br />                    </plugin><br />                </plugins><br />            </build><br /></span></div><br />ȝ是exec:exec是要独立一个新q程来执行程序的, exec:javaq? 其实用mvnDebug + exec:java也是理论可行?img src ="http://www.tkk7.com/miaoyachun/aggbug/427858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2015-10-21 17:12 <a href="http://www.tkk7.com/miaoyachun/archive/2015/10/21/427858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于jconsole昄自定义的MBeanhttp://www.tkk7.com/miaoyachun/archive/2015/09/08/427184.htmlMilo的v?/dc:creator>Milo的v?/author>Tue, 08 Sep 2015 02:53:00 GMThttp://www.tkk7.com/miaoyachun/archive/2015/09/08/427184.htmlhttp://www.tkk7.com/miaoyachun/comments/427184.htmlhttp://www.tkk7.com/miaoyachun/archive/2015/09/08/427184.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/427184.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/427184.html
  1. 自定义的Mbean的普通method能在jconsole的Mbeans里显C出来,但是涉及到geters/seters无法显CZ
  2. 如果MBean注册C面Ş式创建的MBeanServer在Jconsole上无法显C的
    MBeanServer server = MBeanServerFactory.createMBeanServer();
    但是如果注册C面的形式创徏的Server在Jconsole上是可以昄MBean?br />
    MBeanServer server = ManagementFactory.getPlatformMBeanServer();       

stackoverflow上也有h发现q个问题

    http://stackoverflow.com/questions/7424009/mbeans-registered-to-mbean-server-not-showing-up-in-jconsole



]]>
java 帔R池从jdk7开始从ҎUd堆内http://www.tkk7.com/miaoyachun/archive/2015/05/06/424894.htmlMilo的v?/dc:creator>Milo的v?/author>Wed, 06 May 2015 09:35:00 GMThttp://www.tkk7.com/miaoyachun/archive/2015/05/06/424894.htmlhttp://www.tkk7.com/miaoyachun/comments/424894.htmlhttp://www.tkk7.com/miaoyachun/archive/2015/05/06/424894.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/424894.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/424894.html从jdk7最开始的release version (http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html)的notes里看?br />
Area: HotSpot
Synopsis: In JDK 7, interned strings are no longer allocated in the permanent generation of the Java heap, but are instead allocated in the main part of the Java heap (known as the young and old generations), along with the other objects created by the application. This change will result in more data residing in the main Java heap, and less data in the permanent generation, and thus may require heap sizes to be adjusted. Most applications will see only relatively small differences in heap usage due to this change, but larger applications that load many classes or make heavy use of the String.intern() method will see more significant differences.
RFE: 6962931


]]>
Ubuntu12.04s上jenkins用启动脚本启动失败的一U原?/title><link>http://www.tkk7.com/miaoyachun/archive/2015/02/28/423103.html</link><dc:creator>Milo的v?/dc:creator><author>Milo的v?/author><pubDate>Sat, 28 Feb 2015 08:51:00 GMT</pubDate><guid>http://www.tkk7.com/miaoyachun/archive/2015/02/28/423103.html</guid><wfw:comment>http://www.tkk7.com/miaoyachun/comments/423103.html</wfw:comment><comments>http://www.tkk7.com/miaoyachun/archive/2015/02/28/423103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/miaoyachun/comments/commentRss/423103.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/miaoyachun/services/trackbacks/423103.html</trackback:ping><description><![CDATA[<div> 今天有同事问Z么ubuntu上启动jenkinsp|Q我记得之前玩的时候ƈ没有出现q种情况Q于是跟t了下,最l错误信息是:<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; ">daemon: fatal: refusing to execute unsafe program: /usr/bin/java (/opt is group and world writable)</span></div><br />Ҏ原因是机器装了多个版本的jdk, jdk所在的/opt父目录的权限攄比较大,按照daemon要求的限制到755<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; ">chmod -R </span><span style="color: #000000; ">755</span><span style="color: #000000; "> /opt</span></div> </div><br />问题p决了?br /><br />其实q个场景q是蛮常见的Q遇到的人应该挺多的<br /><img src ="http://www.tkk7.com/miaoyachun/aggbug/423103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/miaoyachun/" target="_blank">Milo的v?/a> 2015-02-28 16:51 <a href="http://www.tkk7.com/miaoyachun/archive/2015/02/28/423103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>valgrind memory check on java programhttp://www.tkk7.com/miaoyachun/archive/2013/12/06/407274.htmlMilo的v?/dc:creator>Milo的v?/author>Fri, 06 Dec 2013 02:26:00 GMThttp://www.tkk7.com/miaoyachun/archive/2013/12/06/407274.htmlhttp://www.tkk7.com/miaoyachun/comments/407274.htmlhttp://www.tkk7.com/miaoyachun/archive/2013/12/06/407274.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/407274.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/407274.html
valgrind --error-limit=no --trace-children=yes --smc-check=all --leak-check=full JAVA_CMD

Ҏ写了个有leak的jni函数Q用valgrind成功查出来了
==31915== 100 bytes in 1 blocks are definitely lost in loss record 447 of 653
==31915==    at 0x402CE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==31915==    by 0x60424F9: Java_MyJNI_hello (MyJNI.c:16)

在老版本valgrind(3.5.0) enable?-trace-children选项后可能出现错?
 Error occurred during initialization of VM    
Unknown x64 processor: SSE2 not supported

升到最新版可以解决q个问题Q升U方法:下蝲src?解压后执?./configure; make; make install


]]>
maven本地三方依赖包插件addjars-maven-pluginhttp://www.tkk7.com/miaoyachun/archive/2013/10/30/405795.htmlMilo的v?/dc:creator>Milo的v?/author>Wed, 30 Oct 2013 06:03:00 GMThttp://www.tkk7.com/miaoyachun/archive/2013/10/30/405795.htmlhttp://www.tkk7.com/miaoyachun/comments/405795.htmlhttp://www.tkk7.com/miaoyachun/archive/2013/10/30/405795.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/405795.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/405795.html
    <build>
        
<plugins>
            
<plugin>
                
<groupId>com.googlecode.addjars-maven-plugin</groupId>
                
<artifactId>addjars-maven-plugin</artifactId>
                
<version>1.0.2</version>
                
<executions>
                    
<execution>
                        
<goals>
                            
<goal>add-jars</goal>
                        
</goals>
                        
<configuration>
                            
<resources>
                                
<resource>
                                    
<directory>${basedir}/../lib</directory>
                                
</resource>
                            
</resources>
                        
</configuration>
                    
</execution>
                
</executions>
            
</plugin>
            
<plugin>
                
<groupId>org.apache.maven.plugins</groupId>
                
<artifactId>maven-assembly-plugin</artifactId>
                
<version>${maven.assembly.version}</version>
                
<configuration>
                    
<descriptorRefs>
                        
<descriptorRef>jar-with-dependencies</descriptorRef>
                    
</descriptorRefs>
                    
<appendAssemblyId>false</appendAssemblyId>
                
</configuration>
                
<executions>
                    
<execution>
                        
<phase>package</phase>
                        
<goals>
                            
<goal>single</goal>
                        
</goals>
                    
</execution>
                
</executions>
            
</plugin>
        
</plugins>
    
</build>

把项目中依赖的三方jars全放到lib目录里,全部会打包到release jar里了



]]>
反编译java classq优雅的调试http://www.tkk7.com/miaoyachun/archive/2013/02/22/395575.htmlMilo的v?/dc:creator>Milo的v?/author>Fri, 22 Feb 2013 07:01:00 GMThttp://www.tkk7.com/miaoyachun/archive/2013/02/22/395575.htmlhttp://www.tkk7.com/miaoyachun/comments/395575.htmlhttp://www.tkk7.com/miaoyachun/archive/2013/02/22/395575.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/395575.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/395575.html用jd-eclipse 插g来反~译java class文g的输是挺nice的,虽然阅读方便?但是对debug造成一定的困扰Q主要问题是line number的不match.
Google了下遇到cM问题的真不少。最l找C解决ҎQ?br />
http://sourceforge.net/projects/realignmentjd/files/
-----------------

1. Download JD-Eclipse and JD-GUI - http://java.decompiler.free.fr/ and install.
2. Put a file realignment.jd.ide.eclipse_1.0.2.jar in eclipse/plugins directory.
    To use Realignment feature it is necessary to open the menu Preferences/General/Editors/File Associations and to select "*.class" file type and to choose "Realignment for JD Class File Editor" for Associated editors.
    Another possibility is the batch realignment after processing JD-GUI. To work properly you must to switch on the property "Display line numbers" in Help/Preferences of JD-GUI.
    To use this feature it is necessary to open the menu Preferences/Java/Decompiler/Batch Realignment and click button "Open dialog". Existing limitation: the realignment is performed only for the methods.
    To work properly it is necessary that the property "Display line numbers" in menu "Preferences/Java/Decompiler" was active.


JD-Eclipse插g + realignment 补丁让优雅的debug class 文g成ؓ可能?br />
如果只是Z阅读class代码Q徏议不要用realignment 补丁Q这样会降低代码的可L(会多出大量的IQ?br /> 


]]>
一些项目中用到的mvn例子http://www.tkk7.com/miaoyachun/archive/2013/01/10/394058.htmlMilo的v?/dc:creator>Milo的v?/author>Thu, 10 Jan 2013 05:33:00 GMThttp://www.tkk7.com/miaoyachun/archive/2013/01/10/394058.htmlhttp://www.tkk7.com/miaoyachun/comments/394058.htmlhttp://www.tkk7.com/miaoyachun/archive/2013/01/10/394058.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/394058.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/394058.htmlmvn 执行外部命o
命o行模?br />
mvn exec:exec -Dexec.executable=sh -Dexec.workingdir=./bin -Dexec.args=hello.sh

配置文g形式
                        <plugin>
                                <groupId>org.codehaus.mojo</groupId>
                                <artifactId>exec-maven-plugin</artifactId>
                                <executions>
                                        <execution>
                                                <id>test-exec</id>
                                                <phase>initialize</phase>
                                                <configuration>
                                                        <executable>sh</executable>
                                                        <workingDirectory>./bin</workingDirectory>
                                                        <arguments>
                                                                <argument>hello.sh</argument>
                                                        </arguments>
                                                </configuration>
                                                <goals>
                                                        <goal>exec</goal>
                                                </goals>
                                        </execution>
                                </executions>
                        </plugin>

mvn 生成java目
生成骨架
mvn archetype:generate -DgroupId=com.abc.product -DartifactId=product -DpackageName=com.abc.product -DarchetypeArtifactId=maven-archetype-quickstart

转成eclipse能识别的java 目
mvn eclipse:eclipse
导入eclipse 然后coding

mvnq行单元试
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-surefire-plugin</artifactId>
                                <version>
2.12.4</version>
                                <configuration>
                                        <forkMode>pertest</forkMode>
                                        <excludes>
                                                <exclude>**/perftest/*.java</exclude>
                                        </excludes>
                                        <systemProperties>
                                                <property>
                                                        <name>log4j.configuration</name>
                                                        <value>target/test-classes/log4j.properties</value>
                                                </property>
                                        </systemProperties>
                                </configuration>
                        </plugin>

mvnq行code coveragel计
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>emma-maven-plugin</artifactId>
        <version>1.0-alpha-3</version>
        <inherited>true</inherited>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>surefire-report-maven-plugin</artifactId>
        <inherited>true</inherited>
      </plugin>
    </plugins>
  </reporting>

mvn生成javadoc
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-javadoc-plugin</artifactId>
                                <version>
2.9</version>
                                <configuration>
                                        <show>private</show>
                                </configuration>
                                <executions>
                                        <execution>
                                                <id>attach-javadocs</id>
                                                <goals>
                                                        <goal>javadoc</goal>
                                                        <goal>test-javadoc</goal>
                                                </goals>
                                                <phase>site</phase>
                                        </execution>
                                </executions>
                        </plugin>



]]>
关于java.library.pathhttp://www.tkk7.com/miaoyachun/archive/2012/12/06/392529.htmlMilo的v?/dc:creator>Milo的v?/author>Thu, 06 Dec 2012 03:05:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/12/06/392529.htmlhttp://www.tkk7.com/miaoyachun/comments/392529.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/12/06/392529.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/392529.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/392529.html
最q项目要用JNI, 涉及到用java.library.pathq个参数Q开始以为只要ldconfig能识别到的so文gjava 一定能扑ֈQ可惜ƈ不是q样。?br />要想javaE序扑ֈ׃n库还是要在执行javaE序的时候指定java.library.pathQ用eclipse的话可以讄如下Q?br />
Properties->Run/Debug settings->Arguments->VM arguments
-----------------------------------------
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
q个是传l的方式Qgoogle了下有个tricky的方式让E序动态修改java.library.path
    private static void loadJNILibDynamically() {
        
try {
            System.setProperty(
"java.library.path", System.getProperty("java.library.path")
                    
+ ":/home/miaoyachun/workspace/JNIC/Release/");
            Field fieldSysPath 
= ClassLoader.class.getDeclaredField("sys_paths");
            fieldSysPath.setAccessible(
true);
            fieldSysPath.set(
nullnull);

            System.loadLibrary(
"JNIC");
        } 
catch (Exception e) {
            
// do nothing for exception
        }
    }

事实上linux下还有个环境变量LD_LIBRARY_PATHQ如果lib能在q个path里找刎ͼjava.library.path׃用配|了Q而且不需要关心lib之间依赖的问题。java.library.path在这斚w弱很多Q比如lib依赖其他目录的lib{?img src ="http://www.tkk7.com/miaoyachun/aggbug/392529.html" width = "1" height = "1" />

]]>
Ubuntu上的alternativeshttp://www.tkk7.com/miaoyachun/archive/2012/10/26/390260.htmlMilo的v?/dc:creator>Milo的v?/author>Fri, 26 Oct 2012 05:31:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/10/26/390260.htmlhttp://www.tkk7.com/miaoyachun/comments/390260.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/10/26/390260.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/390260.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/390260.html关于alternatives的用?br />

alternatives --install /usr/bin/java java /opt/jdk1
.5.0_22/bin/java 15000
alternatives --install /usr/bin/javac javac /opt/jdk1
.5.0_22/bin/javac 15000
alternatives --config java
alternatives --config javac
最q切换桌面环境到ubuntu, 发现alternativesq个工具改名?update-alternatives
用法q是一L。?br />

]]>
用JNI从C传递结构体到JAVAhttp://www.tkk7.com/miaoyachun/archive/2012/10/12/389473.htmlMilo的v?/dc:creator>Milo的v?/author>Fri, 12 Oct 2012 08:40:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/10/12/389473.htmlhttp://www.tkk7.com/miaoyachun/comments/389473.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/10/12/389473.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/389473.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/389473.html 直接上C的实?br />
typedef struct Foo {
    
int len;
    
char name[100];
} Foo_t;

JNIEXPORT jint JNICALL
Java_TestJNI_foo(JNIEnv 
*env, jobject obj, jobject fooObj) {

    Foo_t 
* bar = malloc(sizeof(Foo_t));
    jclass clazz;
    jfieldID fid;

    
//init the bar data of C
    strcpy(bar->name, "Yachun Miao");
    bar
->len = strlen(bar->name);

    
// mapping bar of C to foo
    clazz = (*env)->GetObjectClass(env, fooObj);
    
if (0 == clazz) {
        printf(
"GetObjectClass returned 0\n");
        
return (-1);
    }
    fid 
= (*env)->GetFieldID(env, clazz, "len""I");
    (
*env)->SetLongField(env, fooObj, fid, bar->len);

    fid 
= (*env)->GetFieldID(env, clazz, "name""Ljava/lang/String;");
    jstring name 
= (*env)->NewStringUTF(env, bar->name);
    (
*env)->SetObjectField(env, fooObj, fid, name);

    free(bar);
    
return 0;
}

对应的Java调用
public class Foo {
    
protected int len;
    
protected String name;
}


    
private static native int foo(Foo fooObj);

    
public static void main(String args[]) {
        System.loadLibrary(
"mylib");

        Foo foo 
= new Foo();
        foo(foo);
        System.out.println(foo.name);
        System.out.println(foo.len);

    }

参考链?br />
http://www.steveolyo.com/JNI/JNI.html#CSTRCJ
http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/types.html



]]>
Jetty SslSelectChannelConnector about file downloadinghttp://www.tkk7.com/miaoyachun/archive/2012/07/18/383427.htmlMilo的v?/dc:creator>Milo的v?/author>Wed, 18 Jul 2012 10:22:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/07/18/383427.htmlhttp://www.tkk7.com/miaoyachun/comments/383427.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/07/18/383427.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/383427.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/383427.html 发现用curl从jetty服务器上download文g的速度比较慢大概只?M/s, 开始以为curl有默认的limit-rateQ设|ؓ1G以后发现q是慢?br />然后开始怀疑是jetty server的问题。看SslSelectChannelConnector的responseBufferSize比较像,反复实验发现原来是由于headerBufferSize太小?br /> 改ؓ32K以后Q?br />
        SslSelectChannelConnector connector = new SslSelectChannelConnector();
        
        connector.setRequestBufferSize(
32768);

效果Q?br />
curl -k https://USER:PASSWD@HOST:PORT/api/internal/file?filename=/path/to/file > /dest/to/file
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                             Dload     Upload   Total   Spent     Left   Speed
100  723M  100  723M    0     0   29.3M      0       0:00:24  0:00:24 --:--:-- 29.4M

ref: http://wiki.eclipse.org/Jetty/Howto/Configure_Connectors

]]>
maven project to eclipse java projecthttp://www.tkk7.com/miaoyachun/archive/2012/06/27/381618.htmlMilo的v?/dc:creator>Milo的v?/author>Wed, 27 Jun 2012 07:56:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/06/27/381618.htmlhttp://www.tkk7.com/miaoyachun/comments/381618.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/06/27/381618.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/381618.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/381618.htmlsteps:
1. download maven project src code
2. cd project root dir & run "mvn eclipse:eclipse"
3. import it as eclipse java prject    

step2 will generate .classpath & .project file

]]>
目依赖分析工具http://www.tkk7.com/miaoyachun/archive/2012/06/13/380695.htmlMilo的v?/dc:creator>Milo的v?/author>Wed, 13 Jun 2012 08:13:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/06/13/380695.htmlhttp://www.tkk7.com/miaoyachun/comments/380695.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/06/13/380695.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/380695.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/380695.html
zane昨天推荐个项目依赖分析的工具: http://www.jboss.org/tattletale

JBoss Tattletale is a tool that can help you get an overview of the project you are working on
or a product that you depend on.

The tool will provide you with reports that can help you

* Identify dependencies between JAR files
* Find missing classes from the classpath
* Spot if a class/package is located in multiple JAR files
* Spot if the same JAR file is located in multiple locations
* With a list of what each JAR file requires and provides
* Verify the SerialVersionUID of a class
* Find similar JAR files that have different version numbers
* Find JAR files without a version number
* Find unused JAR files
* Identify sealed / signed JAR archives
* Locate a class in a JAR file
* Get the OSGi status of your project

使用Ҏ
java -Xmx512m -jar tattletale.jar [-exclude=<excludes>] <scan-directory> [output-directory]

注意事项
tattletale只分析jar包之间的依赖Q需要自己把所有的class文g打包攑օscan-directoryQ然后把依赖的lib也放入同个目?/span>


]]>
Javaq程memory leak分析http://www.tkk7.com/miaoyachun/archive/2012/03/16/372005.htmlMilo的v?/dc:creator>Milo的v?/author>Fri, 16 Mar 2012 01:45:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/03/16/372005.htmlhttp://www.tkk7.com/miaoyachun/comments/372005.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/03/16/372005.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/372005.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/372005.htmljmap & jhat
通过分析heap中对象的数量q有大小可以定位哪个cd了问题?img src ="http://www.tkk7.com/miaoyachun/aggbug/372005.html" width = "1" height = "1" />

]]>
Program exception handlinghttp://www.tkk7.com/miaoyachun/archive/2012/03/12/371745.htmlMilo的v?/dc:creator>Milo的v?/author>Mon, 12 Mar 2012 08:35:00 GMThttp://www.tkk7.com/miaoyachun/archive/2012/03/12/371745.htmlhttp://www.tkk7.com/miaoyachun/comments/371745.htmlhttp://www.tkk7.com/miaoyachun/archive/2012/03/12/371745.html#Feedback0http://www.tkk7.com/miaoyachun/comments/commentRss/371745.htmlhttp://www.tkk7.com/miaoyachun/services/trackbacks/371745.html    异常是有代h的,比如量避免使用异常来实现流E控?br />2. 量处理异常
    有能力处理异常则处理掉,不然外层函数会篏U太多的异常
3. 处理不了则抛出异?br />    自己问自己,q个异常能够处理么,不行的话直接抛出Q可以参考原?
4. Throw early and catch late
    一般底层函C会处理异常,外层函数会根据上下文捕获异常q行处理或者{?br />5. 不要覆盖异常
6. try块不应该太大Q代码规范)
7. 函数抛出的异怸应该太多Q代码规范)

参?br />


]]> վ֩ģ壺 žžƵ| Ƶ| Ʒһ鶹| ޾ƷԴ26u| պѹۿһëƬ| hƵѿ| Ѹ| վɫƵѿ½| Ʒ޾Ʒ| þþþAVר| Ʒһ߹ۿ| ˸徫ƷѼ| 24Сʱձwwwѵ| 9420ѸƵ| Ƶֻ߹ۿַ| JIZZйJIZZѿ| ߾ƷAAVV| պƷרձ| ۾ƷҹӰ| ޹ƷԲĵӰ| ޾ƷVŷ޾ƷVպƷ| Ļ| AV뾫Ʒһ| պѸƵ| Ʒð׽Ƶ| ѹۿһƬ| ߹ۿƵ| ĻwwwӰԺѹۿ| ҹƵѳ| ձѲ| Ʒva鶹 | ߵӰ| ޹Ƭ߹ۿ| ˳վ߲vr| ޾ƷƷ| һ| þۺϾžһ| ޹ۺרߵӰ| 777޾Ʒþþþþ | ѹva߹ۿ| wwwһwww|