Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 关于spring启动的优化的问题
【标  题】:关于spring启动的优化的问题
【关键字】:spring
【来  源】:http://blog.csdn.net/newfox/archive/2006/08/10/1045322.aspx

关于spring启动的优化的问题

Your Ad Here  jspark 的这篇文章《开发阶段eclipse下面的spring容器的启动优化 》讲到如何加快spring的启动速度。非常感谢jspark. 一下是引用的原文:

  最近在负责一个大项目,项目组成员包括项目经理大概10个人左右。项目技术用struts+spring+hibernate实现。项目的规模相对来说是比较大的,总共有10大模块,每个大模块又分为有十几个、甚至几十个小模块。开发工具用eclipse,由于在开发阶段,项目开发成员需要频繁重启服务器。在启动服务器的时候,每次启动时间总是会超过1分钟。记得以前在做另外一个项目时,启动时间不到5秒钟,相差了10倍,而且项目规模是差不多的。

    从初步分析来说,应该是hibernate解释hbm.xml时花费时间,或者可能是spring容器启动并解释所有的bean配置文件。诊断了一下,发现1分钟消耗的时间主要分布在hibernate解释hbm.xml花费5秒;spring容器从启动到解释bean配置文件竟然花了58秒,真是太嚣张了。当时非常怀疑spring的效率问题。企图从网上搜索相关资料,看看有什么优化措施。

    首先是找到了hibernate的启动优化 http://www.hibernate.org/194.html  里面的主要思想是通过将xml序列花到本地的文件里,每次读取的时候根据情况,从本地文件读取并反序列化,节省了hibernate xml的解析时间。按照这个方式测试了一下,发现hibernate的启动时间从5秒降低到3秒,但是这个优化对于整个启动过程是杯水车薪的,毫无用处。

    没办法,又仔细查看了spring的资料,终于发现spring的容器是提供了lazy-load的,即默认的缺省设置是bean没有lazy- load,该属性处于false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这么庞大的规模,难怪spring的启动时间要花将近1分钟。尝试了一下,把beans的 default-lazy-init改为true就,再次启动,速度从原来的55秒,降到8秒钟!!Great!虽然是非常小一个改动,但是影响确实非常大。一个项目组10个人,假若每个人一天平均需要在eclipse下启动测试服务器50次。那么一天项目组需要重启500次,每次节省50秒的话,就是 25000秒,将近几个小时,差不多一个工作日,多么可观的数字!

   不过在运行期间第一次点页面的时候,由于spring做了lazy-load,现在就需要启动一部分需要的beans,所以稍微慢2-3秒钟,但是明显比等几十秒要快很多,值得一鉴。

    以上是针对开发阶段的spring容器启动优化,在部署到实际环境中,倒是没必要设置为lazy-load。毕竟部署到实际环境中不是经常的事,每次启动1分钟倒不是大问题。

我这里要提醒的是不是说有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init

<beans default-lazy-init="true">
    
    
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        
<property name="triggers">
            
<list>
                
<ref bean="buildHtmlTrigger"/>
                
<ref bean="askTrigger"/>
                
<ref bean="mailSenderTrigger"/>
                
<ref bean="topicDetailBuildTrigger"/>
                
<ref bean="forumBuildTrigger"/>
                
<ref bean="topicBuildTrigger"/>
            
</list>
        
</property>
    
</bean>
</beans>



这样的话。所有的scheduler就都不管用了。所以请大家要注意。
<beans>
    
    
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        
<property name="triggers">
            
<list>
                
<ref bean="buildHtmlTrigger"/>
                
<ref bean="askTrigger"/>
                
<ref bean="mailSenderTrigger"/>
                
<ref bean="topicDetailBuildTrigger"/>
                
<ref bean="forumBuildTrigger"/>
                
<ref bean="topicBuildTrigger"/>
            
</list>
        
</property>
    
</bean>
</beans>


创造共用协议:署名,非商业,保持一致   除经特别注明外,本文章版权归莫多泡泡所有.
署名,非商业用途,保持一致.   somebody(莫多)  
使用sitemesh建立复合视图 - 1.hello:【上一篇】
这是上篇文章的源码?请高手指教!:【下一篇】
【相关文章】
  • Spring技巧之简洁配置
  • Spring技巧之活用FactoryBean
  • SpringSide 1.0 M3-All in one 发布
  • 《Spring技术手册》部分章节
  • 《Spring Framework 概述》
  • 《Spring Framework开发参考手册 Version 1.1》
  • spring 编程入门十大问题解答
  • Spring2.0技巧之活用FactoryBean
  • 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第三部分
  • 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第一部分
  • 【随机文章】
  • 破解pubwin
  • 用户帐号的相关操作
  • 让你惊叹的真实历史(转)
  • PowerDesigner中设置Hibernate一对多,多对一属性
  • 制作从U盘启动的FreeBSD
  • 异常规范
  • jspSmartUpload上传下载全攻略(三)
  • 光纤通信优点
  • 数论中的几个重要算法的程序
  • 一次笔试,一次学习
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.