最近在負(fù)責(zé)一個(gè)大項(xiàng)目,項(xiàng)目組成員包括項(xiàng)目經(jīng)理大概10個(gè)人左右。項(xiàng)目技術(shù)用struts+spring+hibernate實(shí)現(xiàn)。項(xiàng)目的規(guī) 模相對(duì)來(lái)說(shuō)是比較大的,總共有10大模塊,每個(gè)大模塊又分為有十幾個(gè)、甚至幾十個(gè)小模塊。開發(fā)工具用eclipse,由于在 開發(fā)階段,項(xiàng)目開發(fā)成員需要頻繁重啟服務(wù)器。在啟動(dòng)服務(wù)器的時(shí)候,每次啟動(dòng)時(shí)間總是會(huì)超過(guò)1分鐘。記得以前在做另外 一個(gè)項(xiàng)目時(shí),啟動(dòng)時(shí)間不到5秒鐘,相差了10倍,而且項(xiàng)目規(guī)模是差不多的。
從初步分析來(lái)說(shuō),應(yīng)該是hibernate解釋hbm.xml時(shí)花費(fèi)時(shí)間,或者可能是spring容器啟動(dòng)并解釋所有的bean配置文件 。診 斷了一下,發(fā)現(xiàn)1分鐘消耗的時(shí)間主要分布在hibernate解釋hbm.xml花費(fèi)5秒;spring容器從啟動(dòng)到解釋bean配置文件竟然 花了58秒,真是太囂張了。當(dāng)時(shí)非常懷疑spring的效率問(wèn)題。企圖從網(wǎng)上搜索相關(guān)資料,看看有什么優(yōu)化措施。 首先是找到了hibernate的啟動(dòng)優(yōu)化 http://www.hibernate.org/194.html 里面的主要思想是通過(guò)將xml序列花到本地的 文件里,每次讀取的時(shí)候根據(jù)情況,從本地文件讀取并反序列化,節(jié)省了hibernate xml的解析時(shí)間。按照這個(gè)方式測(cè)試了 一下,發(fā)現(xiàn)hibernate的啟動(dòng)時(shí)間從5秒降低到3秒,但是這個(gè)優(yōu)化對(duì)于整個(gè)啟動(dòng)過(guò)程是杯水車薪的,毫無(wú)用處。 下面是hibernate的優(yōu)化代碼:
不過(guò)在運(yùn)行期間第一次點(diǎn)頁(yè)面的時(shí)候,由于spring做了lazy-load,現(xiàn)在就需要啟動(dòng)一部分需要的beans,所以稍微慢2-3 秒鐘,但是明顯比等幾十秒要快很多,值得一鑒。
以上是針對(duì)開發(fā)階段的spring容器啟動(dòng)優(yōu)化,在部署到實(shí)際環(huán)境中,倒是沒(méi)必要設(shè)置為lazy-load。畢竟部署到實(shí)際環(huán)境 中不是經(jīng)常的事,每次啟動(dòng)1分鐘倒不是大問(wèn)題。
我這里要提醒的是不是說(shuō)有的beans都能設(shè)置default-lazy-init成為true.對(duì)于scheduler的bean不能用lazy-init