
2010年3月29日
摘要: 1. Springboot config示例與原理介紹1.1 Springboot config示例Springboot給我們提供了非常便捷與方便的配置使用方式,常用的使用示例有以下兩種:1)使用@ConfigurationProperties 讀取多個(gè)屬性使用方法:@ConfigurationProperties(prefix = "spring.datasource")使用說明:提供...
閱讀全文
posted @
2021-04-08 20:00 x.matthew 閱讀(537) |
評(píng)論 (0) |
編輯 收藏
摘要: jprotobuf-rpc-http 是應(yīng)用jprotobuf類庫(kù)實(shí)現(xiàn)基于http協(xié)議的RPC開發(fā)組件。 目前1.0提供可以直接把Google protobuf的IDL定義語言發(fā)布成RPC服務(wù),客戶端也可以直接應(yīng)用IDL定義語言進(jìn)行動(dòng)態(tài)創(chuàng)建,幫助開發(fā)完全省去了手工編譯protobuf IDL語言的麻煩。
閱讀全文
posted @
2014-10-10 15:20 x.matthew 閱讀(3549) |
評(píng)論 (0) |
編輯 收藏
摘要: JProtobuf官方網(wǎng)址:https://github.com/jhunters/jprotobuf
1.0.0 支持普通類型,嵌套對(duì)象以及對(duì)象數(shù)組的Protobuf協(xié)議的序列化與反序列化實(shí)現(xiàn)。(注解替換proto描述文件)
1.0.1 由注解對(duì)象動(dòng)態(tài)生成Protobuf的IDL描述文件內(nèi)容。
1.0.3 增加由.proto 描述文件動(dòng)態(tài)生成Protobuf操作對(duì)象的支持,詳見下面使用說明。
閱讀全文
posted @
2014-09-30 11:43 x.matthew 閱讀(4909) |
評(píng)論 (4) |
編輯 收藏
摘要: 如果大家有遇到過Java內(nèi)存泄露問題,而且親自動(dòng)手去定位和分析經(jīng)歷的同學(xué)來講,獲取Java的堆內(nèi)信息對(duì)了內(nèi)存使用情況的問題分析和定位是非常有幫助了。例如我們常用的MAT工具,可以較方便的讓我們定位程序中內(nèi)存的使用情況,是哪塊導(dǎo)致了內(nèi)存的泄露等。
但由于傳統(tǒng)的分析過程比較麻煩,需要使用Jdk的jmap(Java Memory Map)命令把heap內(nèi)存dump到一個(gè)文件,然后用MAT進(jìn)行分析。所以本文介紹一種方法可以實(shí)現(xiàn)在線查看heap內(nèi)存的使用情況,并附上源碼實(shí)現(xiàn),希望對(duì)大家有幫助。由于目前調(diào)研中只找到了Sun JDK6以及以上版本的實(shí)現(xiàn),所以目前該方案只支持Sun JDK6或以上。如果其他同學(xué)有其它版本的JDK實(shí)現(xiàn)分享,歡迎一起交流。
閱讀全文
posted @
2013-02-20 16:30 x.matthew 閱讀(6319) |
評(píng)論 (9) |
編輯 收藏
摘要: CyclicBarrier一個(gè)同步輔助類,它允許一組線程互相等待,直到到達(dá)某個(gè)公共屏障點(diǎn) (common barrier point)。假如在涉及一組固定大小的線程的程序應(yīng)用中,要求這些線程必須不時(shí)地互相等待(保證所有線程都執(zhí)行完畢才返回),那么選擇 CyclicBarrier 就會(huì)讓這個(gè)實(shí)現(xiàn)變得非常容易。CyclicBarrier 在釋放等待線程后可以重用,所以又稱它為循環(huán) 的 barrier。
閱讀全文
posted @
2012-06-28 13:34 x.matthew 閱讀(2754) |
評(píng)論 (1) |
編輯 收藏
摘要: 本文通過對(duì)Apache Commons Collections 項(xiàng)目中LRUMap這個(gè)集合類的源代碼進(jìn)行詳細(xì)解讀,為幫助大家更好的了解這個(gè)集合類的實(shí)現(xiàn)原理以及使用如何該集合類。
首先介紹一下LRU算法. LRU是由Least Recently Used的首字母組成,表示最近最少使用的含義,一般使用在對(duì)象淘汰算法上。也是比較常見的一種淘汰算法。
閱讀全文
posted @
2012-06-28 13:34 x.matthew 閱讀(5854) |
評(píng)論 (1) |
編輯 收藏
摘要: Treap=Tree+Heap。Treap本身是一棵二叉搜索樹,它的左子樹和右子樹也分別是一個(gè)Treap,和一般的二叉搜索樹不同的是,Treap記錄一個(gè)額外的數(shù)據(jù),就是優(yōu)先級(jí)。Treap在以關(guān)鍵碼構(gòu)成二叉搜索樹的同時(shí),還按優(yōu)先級(jí)來滿足堆的性質(zhì)(在這里我們假設(shè)節(jié)點(diǎn)的優(yōu)先級(jí)大于該節(jié)點(diǎn)的孩子的優(yōu)先級(jí))。但是這里要注意的是Treap和二叉堆有一點(diǎn)不同,就是二叉堆必須是完全二叉樹,而Treap可以并不一定是。
閱讀全文
posted @
2012-05-16 14:37 x.matthew 閱讀(4294) |
評(píng)論 (0) |
編輯 收藏
摘要: 對(duì)于Mybatis 擁有的Lazy Load(有中文翻譯成延遲加載)功能,應(yīng)該很同學(xué)都有聽說過,今天主要與大家一起來解讀一下Mybatis在Lazy Load功能的實(shí)現(xiàn)的代碼。Lazy Load實(shí)現(xiàn)的功能很好理解,就是在數(shù)據(jù)與對(duì)象進(jìn)行Mapping操作時(shí),只有當(dāng)真正使用該對(duì)象時(shí),才進(jìn)行Mapping操作,以減少不必要的數(shù)據(jù)庫(kù)查詢開銷,從而提升了程序的效率。
閱讀全文
posted @
2011-12-29 19:14 x.matthew 閱讀(5037) |
評(píng)論 (1) |
編輯 收藏
摘要: Thrift出自Facebook用于后臺(tái)各個(gè)服務(wù)間的通訊,Thrift的設(shè)計(jì)強(qiáng)調(diào)統(tǒng)一的編程接口的多語言通訊框架.
本文通過一個(gè)實(shí)例來介紹一下Thrift最基本的應(yīng)用。
閱讀全文
posted @
2011-11-12 18:57 x.matthew 閱讀(17898) |
評(píng)論 (4) |
編輯 收藏
摘要: JDK Proxy AOP實(shí)現(xiàn)與Cglib Proxy AOP實(shí)現(xiàn)對(duì)比。
閱讀全文
posted @
2011-10-10 19:24 x.matthew 閱讀(5022) |
評(píng)論 (1) |
編輯 收藏
摘要: 在SQL開發(fā)過程中,動(dòng)態(tài)構(gòu)建In集合條件查詢是比較常見的用法,在Mybatis中提供了foreach功能,該功能比較強(qiáng)大,但由于官方文檔對(duì)這塊的使用,描述的比較簡(jiǎn)短,細(xì)節(jié)上也被忽略掉了(可能是開源項(xiàng)目文檔一貫的問題吧),也使用不少同學(xué)在使用中遇到了問題。特別是foreach這個(gè)函數(shù)中,collection屬性做什么用,有什么注意事項(xiàng)。由于文檔不全,這塊只能通過源代碼剖析的方式來分析一下各個(gè)屬性的相關(guān)要求。
閱讀全文
posted @
2011-08-31 14:38 x.matthew 閱讀(50562) |
評(píng)論 (4) |
編輯 收藏
摘要: 本文主要介紹什么是API,以及API兼容的重要性,最終給出方案如何評(píng)估API,以及如何做到API兼容。
閱讀全文
posted @
2011-07-29 19:35 x.matthew 閱讀(578) |
評(píng)論 (0) |
編輯 收藏
摘要: Spring聲明式事務(wù)功能應(yīng)該是大家應(yīng)用Spring中使用的最多的功能之一了,的確該功能極大的簡(jiǎn)化了大家對(duì)數(shù)據(jù)庫(kù)操作的。目前Spring支持的聲明式事務(wù)有兩個(gè)配置方式,一種是XML配置方式,另一種是注解方式
針對(duì)配置這塊,XML配置同學(xué)們會(huì)覺得比較麻煩,特別是針對(duì)事務(wù)屬性的配置,所以補(bǔ)充一下本塊配置說明,特分享給大家,希望對(duì)大家有幫助。
閱讀全文
posted @
2011-06-23 13:25 x.matthew 閱讀(4387) |
評(píng)論 (3) |
編輯 收藏
摘要: 本月Tomcat 7.0.14版本正式發(fā)布,其最顯著的一個(gè)新功能就是引入了StuckThreadDetectionValve功能,該功能可以幫助分析和檢查耗時(shí)的請(qǐng)求或潛在可能會(huì)出現(xiàn)請(qǐng)求線程阻塞等情況
閱讀全文
posted @
2011-05-25 21:51 x.matthew 閱讀(3059) |
評(píng)論 (4) |
編輯 收藏
摘要: 本文章會(huì)通過連載的方式來深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用。
本篇技術(shù)文章將介紹Spring聲明式事務(wù)管理實(shí)現(xiàn)技術(shù)細(xì)節(jié)的剖析。
閱讀全文
posted @
2011-04-29 10:54 x.matthew 閱讀(2186) |
評(píng)論 (1) |
編輯 收藏
摘要: 講起靜態(tài)代碼分析工具,估計(jì)大家耳熟能詳?shù)亩寄苤v出幾個(gè)來,像PMD, Checkstyle, Findbug等。沒錯(cuò)這些都是我們?nèi)粘>幋a代碼時(shí)用于提升我們代碼質(zhì)量的好工具,本文將從PMD工具實(shí)現(xiàn)的規(guī)則出發(fā),通過這些規(guī)則的定義來學(xué)習(xí)一下代碼優(yōu)化的技巧,希望通過這些技巧的介紹可以幫助大家在編碼過程中提升大家的代碼編寫質(zhì)量。同時(shí)也算給大家介紹一個(gè)比較不錯(cuò)的途徑去學(xué)習(xí)改進(jìn)代碼編寫質(zhì)量的方法。
閱讀全文
posted @
2011-04-29 10:54 x.matthew 閱讀(2361) |
評(píng)論 (2) |
編輯 收藏
摘要: 本文章會(huì)通過連載的方式來深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用。
本篇技術(shù)文章介紹Spring AOP的實(shí)現(xiàn)。
閱讀全文
posted @
2011-04-01 10:52 x.matthew 閱讀(2353) |
評(píng)論 (0) |
編輯 收藏
摘要: 本塊文章會(huì)通過連載的方式來深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用進(jìn)行介紹。
本篇技術(shù)文章將作為Spring入門篇。
閱讀全文
posted @
2011-03-14 19:24 x.matthew 閱讀(2450) |
評(píng)論 (3) |
編輯 收藏
摘要: 本文是針對(duì) 之前的通過Spring2.5對(duì)單元測(cè)試的Annotation支持進(jìn)行TDD開發(fā) 進(jìn)行擴(kuò)展,增加了Struts Action層的測(cè)試實(shí)現(xiàn)。雖然Action沒有注入到Spring容器,也可以通過 getProxyAction方法,實(shí)現(xiàn)Spring容器的屬性依賴注入實(shí)現(xiàn)
閱讀全文
posted @
2011-02-27 19:15 x.matthew 閱讀(1941) |
評(píng)論 (2) |
編輯 收藏
摘要: 介紹:
Hibernate Envers目的是根據(jù)對(duì)實(shí)體的設(shè)置,提供記錄執(zhí)行數(shù)據(jù)變更歷史的功能(數(shù)據(jù)變更版本)。它實(shí)現(xiàn)原理是通過對(duì)Hibernate的操作事件監(jiān)聽并根據(jù)
基于Annoatation的配置來記錄修改數(shù)據(jù)的內(nèi)容。
閱讀全文
posted @
2010-08-22 23:20 x.matthew 閱讀(9423) |
評(píng)論 (1) |
編輯 收藏
摘要: 在上篇博客中,介紹了如何借助Spring Module項(xiàng)目,配置聲明式緩存功能實(shí)現(xiàn),文中只針對(duì)Ehcahce的實(shí)現(xiàn)進(jìn)行了講解,其它Spring Module項(xiàng)目把這塊的功能做了一個(gè)很好的抽取,使其能更好的對(duì)其它的緩存框架的支持和擴(kuò)展。筆者正好利用該代碼框架實(shí)現(xiàn)了與Memcached服務(wù)的集成,本文將得點(diǎn)通過源代碼解講一下抽取這層的實(shí)現(xiàn),希望大家有所幫助。
閱讀全文
posted @
2010-05-13 19:53 x.matthew 閱讀(4457) |
評(píng)論 (2) |
編輯 收藏
摘要: 前言:
如果大家使用過Spring事務(wù)管理,會(huì)發(fā)現(xiàn)Spring提供的事務(wù)分為“只讀”和“讀寫”事務(wù)兩類。這不免就會(huì)疑問這兩種事務(wù)會(huì)有什么不同?本文則通過對(duì)Spring和Hibernate源代碼的剖析來找出這兩種事務(wù)的區(qū)別。特別是運(yùn)行性能方面的區(qū)別。
文章調(diào)試使用的版本為 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA。
閱讀全文
posted @
2010-05-06 19:31 x.matthew 閱讀(6048) |
評(píng)論 (1) |
編輯 收藏
摘要: 本筆記針對(duì)Spring-dynamic 1.2.0版本進(jìn)行一個(gè)簡(jiǎn)單開發(fā)應(yīng)用講解,使用Apache Felix-1.8.0作為osgi運(yùn)行環(huán)境。
閱讀全文
posted @
2010-04-29 19:08 x.matthew 閱讀(4539) |
評(píng)論 (2) |
編輯 收藏
摘要: 前言:
本文檔將講解一下,如何借助Spring Module項(xiàng)目,實(shí)現(xiàn)配置聲明性緩存功能。
說明:
本檔的配置經(jīng)過本人測(cè)試,都能正確運(yùn)行。
運(yùn)行環(huán)境: Jdk5.0, Spring-2.5, Spring-modules-0.9, ehcache-1.6.0-beta4.jar
閱讀全文
posted @
2010-04-22 19:47 x.matthew 閱讀(3294) |
評(píng)論 (4) |
編輯 收藏
兩種Java代碼實(shí)現(xiàn)方法:
通過jmx rmi 連接:
HashMap env = new HashMap(1);
final String[] credentials = new String[] { "admin", "adminadmin" };
env.put( JMXConnector.CREDENTIALS, credentials );
// so our JMXConnectorProvider may be found
//env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "com.sun.enterprise.admin.jmx.remote.protocol" );
JMXServiceURL serviceURL = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:8686/management/rmi-jmx-connector");
JMXConnector connector = JMXConnectorFactory.connect(serviceURL , env);
MBeanServerConnection connection = connector.getMBeanServerConnection();
Object o = connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName", new Object[]{}, new String[]{});
System.out.println(o);
通過jmx http連接
HashMap env = new HashMap(4);
env.put( "com.sun.enterprise.as.http.auth", "BASIC" );
env.put( "USER", "admin" );
env.put( "PASSWORD", "adminadmin" );
env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "com.sun.enterprise.admin.jmx.remote.protocol" );
JMXServiceURL serviceURL = new JMXServiceURL("s1ashttp", "localhost", 4848);
final JMXConnector conn = JMXConnectorFactory.connect( serviceURL, env );
MBeanServerConnection connection = conn.getMBeanServerConnection();
Object o = connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName", new Object[]{}, new String[]{});
System.out.println(o);
Good Luck!
Yours Matthew!
posted @
2010-03-29 15:42 x.matthew 閱讀(2534) |
評(píng)論 (0) |
編輯 收藏