原始发表时间:2009-06-13
项目做到现在比较头痛的问题之一就是hibernate引入对启动时间的影响。
我做的是用swing开发的客户端,提供给用户用来登记一些信息,但是由于功能很多,所以有一部分交给我们组其他同事协助完成。
大家比较熟悉hibernate,也许换那种直接操作对象的编码方式,所以有许多操作数据的代码都依赖于hibernate,而我受到上一个项目的影响,编码时都只是用ibatis这个ORM工具,所以在最后整合的时候遇到了头痛的事情。
如果只用ibatis的话,客户端启动大约是10秒左右,但是引入hibernate之后,42个hbm文件的加载初始化,就得消耗大约30多秒,界面完全显示估计约1分钟,这恐怕是许多用户无法忍受的。
后来在google上查询“hibernate startup”、“hibernate
performance”等关键字组合,发现了hibernate官方的194号讨论问题,讨论帖链接“https://www.hibernate.org/194.html
”,官方的回应是推荐使用“hibernate.cglib.use_reflection_optimizer=false”这个属性设置来提高启动速度,但是我自己和后面有关讨论者的实测都发现这个方法没有效果。
后面有位老兄推荐自己的项目“Hibernate Dynamic
Module”,据称可以解决hibernate启动时间过长的问题,不过看了一下2006年就没继续更新了,偶可是不敢用这种东东……
有一位兄弟的话倒是有点用处,说是将所有的class的hbm.xml配置文件都设置为lazy="false"这样就可以一定程度的提高启动速度,例如
<class name="myClass" table="myTable" lazy="false">
刚刚实测了一下,效果不佳,只快了一两秒钟……
后来搜索到官方的一个讨论帖“startup time improvements”,链接是http://opensource.atlassian.com/projects/hibernate/browse/HHH-1258
还没有来得及实验其中给出的补丁,等试验完成后再续前文……
2009年6月17日23:17:49 补完本文
虽然很遗憾,但是截止目前为止没有找到合适的提高启动速度的方案。无论是官方还是坊间,我都没有找到解决方法,当然也说不定正在某一时刻正在有人敲击着良好解决该问题的代码,期待着……
后来只好采取“曲线报国”的策略,因为我开发的应用是C/S架构,所以想到增加一个线程初始化这些费时的配置信息,主线程来显示用户界面,这样用户可以第一时间看到界面,后台呢,则在用户慢悠悠的录入用户名和密码的时候初始化配置信息,给用户造成一些错觉,感觉等待的时间变少了。(之前的设计是完成Spring配置初始化后,用户界面才显示,这样用户会因为没看到界面而干着急,或者已经打电话到偶办公室来投诉了……)
分享到:
相关推荐
在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式,使得数据库操作可以更加面向对象化...
使用hibernate-extensions和Middlegen-Hibernate,开发者可以快速搭建起基于Hibernate的项目,大大缩短项目的启动时间。例如,当你已经有了一个完整的数据库结构,只需要运行Middlegen-Hibernate,就可以得到一套...
- `hibernate.c3p0.*`:这些属性是针对C3P0连接池的配置,如最大连接数、最小连接数、超时时间等。 - `hibernate.show_sql`:设置是否显示生成的SQL语句,便于调试。 - `dialect`:指定所使用的数据库方言,如`...
- 示例代码中还包含了异常处理逻辑,确保在发生异常时能够回滚事务,避免数据不一致的问题。 #### 四、实际应用场景 - **跨数据库迁移**:当项目需要支持多种数据库时,可以通过修改配置文件轻松地在不同数据库...
通过深入学习Hibernate 4.1.4.Final的源码,我们可以更好地理解其设计思想,提升我们的编程技巧,同时也能为日常开发中遇到的问题提供解决方案。这是一份宝贵的资源,无论是对于初学者还是经验丰富的开发者,都值得...
1. Configuration类:这是启动Hibernate的第一步,它负责配置并创建SessionFactory实例。配置包括数据库连接信息、ORM映射文件路径等。 2. SessionFactory接口:这是Hibernate的核心组件,它是线程安全的,用于初始...
SessionFactory是线程安全的,通常在应用启动时创建并缓存,整个应用生命周期中只创建一次。 2. **Session**: Session是与数据库交互的主要接口,它实现了事务管理和对象的保存、更新、删除等操作。Session也负责...
5. 监控和调优:Proxool提供了一些监控工具和属性,比如最大连接数、空闲超时时间等,可以根据应用的实际情况进行调整,以优化性能和资源使用。 综上所述,这个"Hibernate dbpool proxool例子和jar包"提供的内容...
- **原因**:在启动Hibernate SessionFactory时未能正确加载配置文件。 - **解决方案**:确认Hibernate.cfg.xml文件位置正确无误,且路径符合约定(如放在src/main/resources目录下)。 3. **映射信息错误**: -...
对于定时任务,可以在应用启动后等待指定时间观察是否按预期执行。可以设置日志输出,以便于调试和监控任务执行情况。 通过这个"springmvc+Hibernate配置定时器jar包",开发者可以快速搭建具备定时任务功能的Java ...
通过这种技术,Hibernate不仅自动化了从Java类到数据库表的映射过程,还提供了数据查询和检索的功能,大大减少了开发者在手动数据处理上所花的时间。Hibernate的设计目标是通过消除手动、手工制作的数据处理,利用...
5. 重新启动 Eclipse,即可看到 Hibernate_Tools_for_Eclipse 插件已经安装完成。 二、使用 Hibernate_Tools_for_Eclipse 插件 安装完毕后,创建一个新的 Hibernate 工程,选择 File -New -Hibernate ...
`hibernate.cfg.xml`是Hibernate的主要配置文件,包含了数据库连接信息、缓存设置、日志配置等,是启动Hibernate的第一步。 **5. 映射文件(User.hbm.xml)** 这是用户实体类到数据库表的映射文件,定义了对象属性...
- **配置文件**:Hibernate的配置文件(hibernate.cfg.xml)用于设置数据源、实体类路径等信息,它是连接数据库和启动SessionFactory的关键。 - **实体类**:实体类对应数据库中的表,通过注解或XML配置文件进行...
要使用 Envers,首先需要在 Hibernate 的配置文件或应用的启动代码中进行设置。主要的配置选项包括: - `hibernate.envers.audit_table_suffix`:指定审计表的后缀,默认为 `_AUD`。 - `hibernate.envers.default_...
- **基本配置**:介绍了启动Envers的基本设置步骤,包括启用审计功能所需的配置项。 - **选择审计策略**:提供了关于如何根据需求选择合适的审计策略的指导。不同的审计策略适用于不同的场景,例如基于事件的审计...
3. **org.hibernate.boot** 包:这部分涉及Hibernate的启动过程和元数据加载,比如`MetadataSources`和`MetadataBuilder`,它们负责从不同来源(如XML配置文件、注解等)收集元数据。 4. **org.hibernate.type** 包...
- `proxool.hibernate.max_wait`:最大等待时间(超时后抛出异常)。 3. **配置Hibernate**:在hibernate.cfg.xml中,设置`c3p0`或`dbcp`等默认的连接池为`proxool`,并指定Proxool的配置属性,例如: ```xml ...