java - 分析 spring 容器以了解如何优化其启动时间的最佳方法是什么?

标签 java performance spring optimization profiling

我有一个相当大的应用程序,Spring 启动时间大约是 20 秒。对于生产使用,这很好,但对于开发,这是一个很大的痛苦。

有什么好的分析工具或方法可以准确地为我提供我需要的信息来找出需要这么长时间的原因?也许这是我可以优化的东西?

我的应用程序是一个相当典型的 spring/hibernate web 应用程序。大约有 50 个数据库表和数百个 bean(比如 200-300 ......我没数过)。有一些 @Configurable bean。大量组件扫描​​。我也在使用 Spring Security。

我用 log4j 做了一些 primitize 分析 - 只是在 INFO 设置。以下是一些需要一些时间的事情:

  • INFO DefaultListableBeanFactory:555 - 预实例化单例 - 2 秒
  • INFO SessionFactoryImpl:202 - 构建 session 工厂 - 2 秒
  • INFO HibernateTransactionManager:415 - 使用 Hibernate SessionFactory 的 DataSource [com.mchange.v2.c3p0.ComboPooledDataSource......] 用于 HibernateTransactionManager - 7 秒

有几件事最多需要 0.5 到 1 秒,但这 3 个是最长的。

最佳答案

您可以尝试的一个选项是使用 default-lazy-init 选项来延迟初始化 bean。 Spring 在初始化期间初始化所有单例范围的 bean。阅读 reference doc延迟实例化 bean 部分.

确保参数化该值,以便您可以在开发期间将其更改为 true,在生产部署期间将其更改为 false。

组件扫描速度很慢。 Refer to this post关于如何在使用 Autowiring 时禁用此功能。

关于java - 分析 spring 容器以了解如何优化其启动时间的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253424/

相关文章:

java - 使用 XSLT 如何以引导加载方式从 XML 获取资源链接?

java - 提交后hibernate对象处于什么状态?

javascript - 合并两个对象数组的最有效方法

java - 为 Spring Locale Interceptor 定义默认语言环境并处理异常

java - 如何为 Spring 集成邮件配置动态入站?

java - Java中有没有办法在不尝试创建文件的情况下确定路径是否有效?

java - 我想在 Android 中解析 Google Map API 以进行反向地理编码

c - 为什么要把代码放在标题中

c++ - Dalvik 对 native C++ 代码性能的影响?

Java Spring Security 5 + MySQL 数据库 : Encoded password does not look like BCrypt