将 Hibernate 版本从 4.3.9.Final 升级到 5.0.2.Final 后,Tomcat Server 的启动时间增加了。
调试后,我意识到 hibernate 在其元数据源中添加映射位置(*.hbm.xml 文件)需要花费太多时间。
我使用以下代码在会话工厂中添加了映射位置,在我的项目中大约有 1000 个 hbm.xml 文件。
<bean id="baseSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.jdbc.fetch_size">300</prop>
<prop key="net.sf.ehcache.configurationResourceName">/ehcache.xml</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
</props>
</property>
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations">
<list>
<value>classpath*:com/*/**/*.hbm.xml</value>
</list>
</property>
</bean>
在启动 tomcat 服务器时,我在方法中进行了调试和发现
org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet
跟随 for 循环在配置类的元数据源对象中添加所有映射位置需要太多时间。
if (this.mappingLocations != null) {
// Register given Hibernate mapping definitions, contained in resource files.
for (Resource resource : this.mappingLocations) {
sfb.addInputStream(resource.getInputStream());
}
}
这里有什么提高性能的解决方案吗?升级到 Hibernate-5 后有人注意到这个问题吗?