`
somebody
  • 浏览: 81228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于spring启动的优化的问题

阅读更多

  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 >


 



莫多 2006-08-10 10:59 发表评论
分享到:
评论

相关推荐

    spring boot/spring cloud项目启动脚本,默认名称:start.sh

    linux服务器,springboot,spring cloud、spring cloud alibaba等项目启动脚本 下载脚本, 1,上传脚本至jar包同级目录 2,更改脚本: jar包名称 项目文件路径 日志路径(包含日志名称) 脚本已配置好jvm优化...

    spring boot部署启动脚本

    标题中的“Spring Boot部署启动脚本”指的是在Spring Boot应用开发完成后,为了自动化部署和启动应用程序而创建的脚本。Spring Boot是一个简化Spring应用程序开发的框架,它提倡“开箱即用”的理念,使得开发者可以...

    spring启动.txt

    ### Spring在Tomcat容器中的启动过程详解 #### 一、Spring框架简介 Spring是一个开源的轻量级Java开发框架,其核心设计目标是为了简化企业级应用的开发。Spring提供了全面的基础架构支持,使得开发者可以专注于业务...

    正向生成及spring加快加载速度 测试记录

    启动时间59秒左右,实在跟之前的项目5秒相差太大,终于忙过一段,抽空找了原因,原来是正向生成时Update表花了一半时间,手动去掉后为25秒左右,又去除了二级缓存,相差不大,快了可能有1秒,之后去除spring加载bean...

    SpringCloud项目

    Sleuth是SpringCloud的分布式跟踪解决方案,它与Zipkin、ELK等日志分析平台集成,便于追踪微服务间的调用链路,优化系统性能。在"renren-security"中,Sleuth能够记录每个请求的完整流程,帮助定位问题和性能瓶颈。...

    spring mvc中启动netty

    - 错误处理:需要处理可能的异常,确保系统在遇到问题时能优雅地关闭。 - 性能优化:根据具体需求调整Netty的线程池大小,以及缓冲区配置等。 8. **总结** 将Spring MVC与Netty结合,可以充分利用Netty的性能...

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。...理解这个过程对于调试和优化Spring应用的性能至关重要。

    Java_Springstartupanalyzer生成一个交互式的spring应用程序启动报告,让您了解是什么因素导.zip

    总结起来,Java Spring Startup Analyzer是一个强大的性能分析工具,它为Spring应用的启动性能提供了可视化的诊断,帮助开发者有效地定位和解决启动速度问题。通过使用这个工具,我们可以提升应用的启动效率,改善...

    解决Idea启动Spring Boot很慢的问题

    解决Idea启动Spring Boot很慢的问题是一种常见的问题,许多开发者在使用Idea启动Spring Boot项目时,遇到了启动时间过长的问题。这种问题可能会导致开发效率下降,影响项目的开发进度。 首先,需要了解启动Spring ...

    spring 源码中文注释

    这份"spring 源码中文注释"包含了对Spring框架源码的详细解读,对于理解其工作原理、优化代码以及定制化开发具有重要意义。 首先,我们来看看Spring的核心组件——IoC容器。IoC容器是Spring的核心,它负责管理对象...

    spring集成socket服务

    在IT行业中,Spring框架是Java开发领域广泛应用的一个开源框架,以其强大的功能和模块化设计而闻名。当涉及到实时通信和低...在实际开发中,还要注意异常处理、安全性及性能优化等问题,以确保服务的稳定性和可靠性。

    spring定时器启动两次原因及解决

    标题中的“spring定时器启动两次原因及解决”指的是在Spring框架中使用了定时任务功能,如Spring Boot的`@Scheduled`注解或者Spring Task模块,但遇到了定时任务被触发执行了两次的问题。这种情况可能是由于配置不当...

    Struts Spring Hibernate性能优化

    在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...

    Spring启动时间表

    在Java开发领域,Spring Boot框架以其便捷的启动和管理服务的能力深受开发者喜爱。Spring Boot启动时间表是理解应用启动...了解这些内容,有助于开发者更好地控制和优化应用的启动流程,提升整体的开发效率和运行性能。

    spring-framework-5.3.8

    8. **模块化**:Spring Framework 5.3.8 继续沿用了模块化设计,允许开发者根据需求选择引入必要的模块,降低项目的体积和启动时间。 9. **安全性**:Spring Security 是 Spring 社区的一个子项目,用于提供身份...

    spring 4.3.14(全)最新的spring4正式版

    7. **性能优化**:在4.3.14版本中,Spring团队对框架进行了大量性能优化,包括更快的启动时间、更少的内存消耗以及更高的并发处理能力。 8. **安全增强**:Spring Security是Spring生态中的重要组件,4.3.14版本...

    Spring Boot启动流程.doc

    Spring Boot的启动流程是开发者理解其工作原理的关键。在本文中,我们将深入探讨Spring Boot启动时...理解这些流程对于开发和调试Spring Boot应用至关重要,因为它可以帮助开发者更好地控制和优化应用程序的启动行为。

    spring-data-jpa

    关于Spring Data JPA的拓展,它允许开发者自定义接口实现,通过编写自己的实现类来覆盖或者增强Spring Data JPA的默认行为。如果需要进行更高级的查询操作或者事务管理,可以实现自定义接口。 在开发过程中,从聚合...

    LEARNING SPRING BOOT 3.0 - THIRD EDITION

    读者将学习如何使用Spring Boot的命令行接口(CLI)快速启动项目,以及如何利用IDE如IntelliJ IDEA或Eclipse进行开发。 书中还会深入讨论Spring Boot的核心特性,比如自动配置、健康检查、内嵌的Tomcat或Jetty...

Global site tag (gtag.js) - Google Analytics