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

Spring配置文件中SessionFactory引用Hibernate配置产生问题的思考

阅读更多

首先说一下题目的意思。比如在Spring配置文件中,有: 

<bean id="sessionFactory"
        class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
        destroy-method
="destroy">
        
<property name="dataSource">
            
<ref bean="dataSource" />
        
</property>
        
<property name="mappingResources">
            
<list>
                
<value>mapping.hbm.xml</value>
            
</list>
        
</property>
        
<property name="hibernateProperties">
            
<props>
                
<prop key="hibernate.dialect">
                    org.hibernate.dialect.SybaseDialect
                
</prop>
                
<prop key="hibernate.query.factory_class">
                    org.hibernate.hql.classic.ClassicQueryTranslatorFactory
                
</prop>
            
</props>
        
</property>
        
<!--<property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
            </property>
        
-->
    
</bean>

注释部分可以代替掉上面所有的property属性。而本文要比较的就是代替与否的效果差别。

先介绍一下背景吧,在做一个系统的过程中,第一种使用的是直接在spring配置文件设置sessionFactory属性的方法(如上代码)。系统的基本框架是Spring MVC&Hibernate. 应用Spring配置Transaction,而数据库操作基本永Spring的HibernateTemplete进行。事实上,这样做基本没有出现什么问题。

为了尝试Hibernate配置的其他属性(因为笔者不是很清楚Spring对此是否很好的支持),从网上看到了如注释代码般,对Hibernate配置文件进行引用的方法(暂称为第二种)。无心之下的一个尝试,带来了很多麻烦。

最大的问题是采用引用第二种方法后,Spring对于Transaction的管理变得非常不稳定。经常有Transaction 发生死锁(这里死锁的意思是,程序运行过程中数据库没有任何响应,也没有异常,而且事后发现,Transaction 没有被提交。) 甚至于,这类死锁发生时,用数据库客户端(Sybase Sql Advatage)也无法访问数据库(表现为长时间停顿,然后报连接丢失)。

另外发现,如果用第二种方法,很多基本的JDBC操作,如果不写在Transaction中,将只有第一次操作结果正常的。比如,调用sp取某值。(为了简便,绕开了HibernateTemplate,直接用JDBC基本操作处理。)这种情况下,对sp的调用需要写在事务内部,不然只能取到一次值,后面返回的值会与第一次完全一样。(同事说到这可能跟Sybase也有关,具体如何,以后有机会再研究)。而如果采用第一种配置文件的写法,无论有没有写在Transaction内部,都不会有问题。

对于事务管理不稳定的原因,我想,是不是因为在第一种中,对DataSource的定义是由Spring完成的。比如:这里看到,DataSource定义成DriverManagerDataSource的实例。

<bean id="dataSource"
        class
="org.springframework.jdbc.datasource.DriverManagerDataSource">
        
<property name="driverClassName">
            
<value>com.sybase.jdbc2.jdbc.SybDriver</value>
        
</property>
        
<property name="url">
            
<value>jdbc:sybase:Tds:aaa.bbb.ccc.net:4105</value>
        
</property>
        
<property name="username">
            
<value>user</value>
        
</property>
        
<property name="password">
            
<value>pass</value>
        
</property>
    
</bean>

 

而第二种方法中,似乎没有牵涉到DataSource的定义。(也就是说,很可能这个处理交给了Hibernate)从而使得Spring 对数据源中某些部分的处理变得异常

笔者还认为,第二种方法常用于这样一种情况:结合Spring与Hibernate开发系统,但不使用Spring 关于Hibernate的API(如HibernateTemplate的API),还是直接使用Hibernate的。后来笔者的了解也证明,也许这种情况对于开发更有好处一些。

上面所写仅作记载。如果有机会完整读一下Spring这一部分的代码,应该会有更好的解释吧。

分享到:
评论

相关推荐

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    3. 在Spring配置文件中配置SessionFactory和TransactionManager。 4. 使用@Autowired注解注入SessionFactory,并在需要的地方进行数据库操作。 这个过程使得我们可以充分利用Spring的IoC(控制反转)和AOP(面向切...

    spring整合struts2与hibernate核心配置文件

    整合SSH涉及到的主要配置文件有`struts2-spring-plugin.xml`、`spring-context.xml`以及Hibernate的相关配置文件(如`hibernate.cfg.xml`)。`struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由...

    hibernate+spring配置文件

    综上,"hibernate+spring配置文件"的配置涉及多个层面,包括Spring的IoC、事务管理、数据源配置,以及Hibernate的SessionFactory、实体映射等。理解并正确配置这些元素是成功整合SSH的关键,也是提升开发效率和系统...

    spring配置文件详解

    在Spring框架中,`applicationContext.xml`是应用上下文配置文件,它是整个Spring应用的核心,用于定义bean的创建、依赖关系以及配置。下面将详细解释配置文件中的各个部分。 首先,XML头文件定义了编码方式,`...

    现有Mysql数据库,写Spring + Hibernate的配置文件

    在本案例中,我们将探讨如何在已有的MySQL数据库环境下,配置Spring和Hibernate来实现数据访问层。 首先,我们需要在项目中引入Spring和Hibernate的相关依赖。在Maven或Gradle的构建文件中,添加对应的依赖库,如...

    Hibernate 和 Spring的结合配置文件

    同时,`Spring`的配置文件(如`applicationContext.xml`)中会包含`Hibernate`的相关bean定义,如SessionFactory、DataSource、TransactionManager等,实现对`Hibernate`的管理。 接着,`HQL`是`Hibernate`提供的...

    spring mvc+hibernate实现事务管理(配置文件版)

    总结,本项目展示了如何在Spring MVC和Hibernate环境中实现事务管理,通过MyEclipse自动生成的包和配置文件,简化了开发流程。在实际应用中,这样的整合能够提供高效且易于维护的Web应用,同时,声明式事务管理极大...

    mybatis,spring,struts2,Hibernate的联想配置文件

    在联想配置文件中,Hibernate的配置通常包括实体类映射(hbm.xml文件)、数据源配置、SessionFactory创建等。 这四个框架的联想配置文件通常会整合在一起,形成一个完整的Java Web应用的配置体系。例如,Spring可以...

    Spring与Hibernate集成

    2. **配置SessionFactory**: 在Spring配置文件中,使用`LocalSessionFactoryBean`定义SessionFactory的配置,指定之前创建的`hibernate.cfg.xml`文件位置。 3. **配置HibernateTemplate**: Spring通过`...

    hibernate与spring整合demo

    6. 配置事务管理:在Spring配置文件中启用事务管理,并定义事务边界。 7. 测试整合:编写测试用例,验证Spring如何管理和调用Hibernate完成数据操作。 五、示例代码 例如,创建一个User实体类,对应的DAO接口和实现...

    spring4配置hibernate3

    4. **配置DataSource**:同样在Spring配置文件中,定义一个DataSource Bean,这通常是连接池的实现,如Apache DBCP或C3P0,用于管理数据库连接。 5. **配置Hibernate SessionFactory Bean**:使用`...

    在Spring中配置Hibernate事务

    创建一个Hibernate的SessionFactory配置,通常在Spring的XML配置文件中完成。这包括数据库连接参数(如URL、用户名、密码)、实体类扫描路径、方言设置等。 3. **配置事务管理器**: 在Spring配置中定义一个...

    Spring-hibernate结合使用全xml配置方式

    在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring主要负责依赖注入和管理,而Hibernate则专注于对象关系映射(ORM)和数据库操作。本教程将详细介绍如何将两者结合,通过全XML配置方式进行集成,...

    hibernate+spring配置详细解析

    本文详细介绍了Hibernate与Spring集成过程中涉及的关键配置,包括数据源、SessionFactory、事务管理器以及事务代理工厂的配置细节。通过这些配置,可以实现对数据库的高效访问,并利用Spring的事务管理机制来简化...

    SSH整合中 hibernate托管给Spring得到SessionFactory

    在Spring配置文件(如applicationContext.xml)中配置SessionFactory的示例代码如下: ```xml &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"&gt; ...

    Myeclipes+spring+hibernate配置

    在配置过程中选择Spring来管理SessionFactory,不使用hibernate.cfg.xml文件,而是将Hibernate配置集成到Spring配置文件中。设置SessionFactory ID,例如“sessionFactory”,并配置数据库连接信息,如数据源...

    Spring+Struts+Hibernate比较详细的整合配置方案

    - 创建Spring配置文件(如`applicationContext.xml`),配置Bean定义,包括Service层、DAO层以及Action类等的实例化和依赖注入。 - 使用Spring的AOP功能,实现事务管理。例如,可以定义一个事务切面,对需要进行...

    SpringMVC+Spring+hibernate配置

    SpringMVC、Spring和Hibernate是Java开发中三大重要的框架,它们各自负责Web应用程序的不同层面,协同工作以构建高效、可维护的系统。SpringMVC作为Spring框架的一部分,主要用于处理HTTP请求,Spring则提供了依赖...

    Struts2.5+ Spring5 + Hibernater5.2整合后项目(包含jar包和配置文件)

    Struts2.5、Spring5和Hibernate5.2是Java Web开发中三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。SSH整合指的是Struts2、Spring和Hibernate的集成,这三个框架分别负责MVC(模型-视图-控制器)...

    Spring与Hibernate整合

    然后,需要在Spring配置文件中配置HibernateTransactionManager,以便Spring可以管理Hibernate的事务。这一步是实现Spring的事务管理功能,确保数据操作的原子性和一致性。 在业务层,可以使用Spring的@Autowired...

Global site tag (gtag.js) - Google Analytics