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
>
分享到:
相关推荐
spring+hibernate启动优化
linux服务器,springboot,spring cloud、spring cloud alibaba等项目启动脚本 下载脚本, 1,上传脚本至jar包同级目录 2,更改脚本: jar包名称 项目文件路径 日志路径(包含日志名称) 脚本已配置好jvm优化...
启动时间59秒左右,实在跟之前的项目5秒相差太大,终于忙过一段,抽空找了原因,原来是正向生成时Update表花了一半时间,手动去掉后为25秒左右,又去除了二级缓存,相差不大,快了可能有1秒,之后去除spring加载bean...
Linux服务:springboot,spring cloud、spring cloud alibaba项目启动脚本 下载脚本,上传脚本至jar包同级目录: #上传至目录后,进入脚本所在目录执行命令 chmod +x start_server.sh #脚本使用: sh start_server...
首先是找到了hibernate的启动优化 http://www.hibernate.org/194.html 里面的主要思想是通过将xml序列花到本地的文件里,每次读取的时候根据情况,从本地文件读取并反序列化,节省了hibernate xml的解析时间。
omen-1.3 自己基于netty开发的服务端,支持spring配置服务器启动模式:http,tcp,websocket等,并支持NIO和OIO方式,项目已应用于生产,可以通过jar形式加入其它项目,业务类实现业务service,启动不依赖于其他应用...
SringBoot的概述# SpringBoot解决上述Spring的缺点SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码...
Spring Boot启动程序和wro4j的自动配置: 是用于分析和优化Web资源的工具。 它汇集了几乎所有现代Web工具:JsHint,CssLint,JsMin,Google Closure压缩器,YUI Compressor,UglifyJs,Dojo Shrinksafe,Css变量...
基于react+javaspring+mysql的知识分享系统源码+数据库.zip 本系统前端基于react+antd组件库实现;后台采用springMVC+mysql实现。 本系统是一个知识分享系统,可在本系统发布文章与别人分享自己的知识;可申请管理...
spring-boot-seckill分布式秒杀系统是一个用SpringBoot开发的从0到1构建的分布式秒杀系统,项目案例基本成型,逐步完善中。 开发环境: JDK1.8、Maven、Mysql、IntelliJ IDEA、SpringBoot1.5.10、zookeeper3.4.6、...
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有...
改装弹簧启动启动器 Retrofit是适用于Android和Java类型安全的HTTP客户端,其最大的特性的是支持通过接口的方式发起HTTP请求。而spring-boot是使用最广泛的Java开发框架,但是Retrofit官方没有支持与spring-boot框架...
AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将...
使用者可以优化前端代码,增加更多有趣的功能 (2)本项目使用Spring Cloud框架完成,毕设的重点在于后端框架的组成,所以总体来看此博客的功能非常欠缺 (3)要更仔细地了解项目可参考resource文件夹中的毕业论文...
它可以使您快速启动并运行,并在您开始投入生产并开始向应用程序发布增量更新时继续简化您的生活。 Create React App对您的React前端做同样的事情。 它通过将使React前端正常工作所需的所有东西组合在一起来加快...
高性能应用设计与开发技术Spring性能优化实践 尽量让spring来管理Java对象,尤其是业务服务,数据访问,资源,Web处理; 尽量避免对Spring Context的定制化; 如果应用启动过慢,可以尝试延迟加载Spring配置(风险:...
第一次启动,人家调用你的时候会出现 timeout 的情况。 引起的原因: 每个服务第一次被请求调用,回去初始化一个 Ribbon 的组件,初始化这些组件需要耗费一定的时间,所以很容易导致超时问题。 解决办法就是让
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 ...
优化和相当多的重点基准集中在内存分配和垃圾收集压力上,这很难衡量,但很容易在启动时遇到问题。 还有一组更广泛但更旧的基准测试,您可能也会感兴趣。 TL;DR 如何让我的应用程序运行得更快? 您大多将不得不放弃...
每秒上万并发下的Spring Cloud参数优化实战 六、D版本 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon) 史上最简单的Spring...