关于spring事务配置
这个问题从一开始困扰了我很久,主要是因为使用HibernateTemplate的时候发生'readOnly‘的问题。之前查了很多资料,都说用spring事务配置可以解决,但之前我都一直没成功。昨天一试,有效果了。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>consumerdaoimpl</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的Interceptor -->
</list>
</property>
</bean>
注:PROPAGATION_REQUIRED表示在目前的事务中执行操作,如果事务不存在就建立一个新的事务
这种配置用的是BeanNameAutoProxyCreate创建代理,但它不一定是创建事务代理,关键在传入的拦截器,如果传入的是事务拦截器,将可自动生成事务代理。如果有更多目标的bean需要自动创建事务代理则可以感受到这种配置的优势,因为只需简单增加一行就可以了。
这样配置之后解决了我之前那些关于session引发的很多问题。
网上说,使用HibernateTemplate操作才能参与到spring事务,而用getSession()拿到Session操作的则没有,有时候我用的时候总发现插入不了数据等问题,似乎是因为事务提交问题。
新的发现
以前写的代码中有时候用getSession().save()方法总出现没报错但又插入不了数据,一开始我总以为是什么包冲突。原来是没事务提交,这点我应该早猜到才是的。
getHibernateTemplate().save(o)这种方法已经交给spring去处理事务提交了,所以可以直接使用,而用getSession().save()就要注意手动提交事务。
public void insert(Object o) throws Exception {
Session session = this.getSession();
Transaction t = session.beginTransaction();
session.save(o);
t.commit();
// this.getHibernateTemplate().save(o);
}
对这个相关问题的认识在进一步加深中,以后有空要去看看相关资料才行
分享到:
相关推荐
Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...
在SSH项目中,Spring主要负责管理Bean的生命周期,整合其他框架,以及提供事务管理。 5. **Spring配置**:配置Spring涉及创建`beans.xml`或`applicationContext.xml`文件,定义Bean的实例化、属性注入、以及它们...
下面我们将详细讲解如何在MyEclipse中创建一个SSH项目,并涉及Spring的编码过滤、Servlet session超时设置以及Spring事务管理器的另一种用法。 1. **MyEclipse新建SSH项目**: - 打开MyEclipse,选择“File” -> ...
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...
在构建基于IDEA的SSH(Struts、Spring、Hibernate)项目时,Spring框架的配置是整个应用程序的核心部分。本文将详细讲解如何在IntelliJ IDEA(IDEA)中配置Spring,以便于理解并掌握SSH集成开发环境下的Spring配置...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
根据提供的文件信息,我们可以深入解析Spring、Struts2以及Hibernate(简称SSH)的集成应用,这一组合常被称为SSH框架,是Java企业级应用开发中的经典架构之一。 ### Spring框架的搭建与整合 #### 1\. Spring与...
SSH是Java Web开发中的三个重要框架,分别是Struts2、Hibernate和Spring,它们共同构建了一个强大的MVC(Model-View-Controller)架构。本项目整合了这三个框架,并使用XML配置来管理各个组件,实现了基本的CRUD...
在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...
《深入解析JSP SSH项目:基于Struts、Spring和Hibernate的移动应用开发》 SSH(Struts、Spring、Hibernate)是Java开发中的经典MVC框架组合,尤其在企业级应用中广泛使用。在这个名为“移动ssh项目”的源码中,我们...
SSH Maven项目是一个基于Java的Web开发框架,由Struts2、Spring和Hibernate三大组件组成,分别负责表现层、业务逻辑层和服务数据访问层。在这个项目中,使用的版本是Struts2.3.24、Spring4.2.4.RELEASE和Hibernate...
SSH开源框架,全称为Struts2、Spring和Hibernate的组合,是Java开发中常见的Web应用框架。这个框架集合了三个强大的组件,旨在提供一个高效、灵活且可扩展的开发环境,帮助开发者快速构建企业级应用。Spring MVC是...
这个"Java项目之移动SSH项目"提供了使用这些技术构建的完整应用源代码,对于学习和理解SSH框架集成以及移动开发有着极大的帮助。以下是这些技术的详细说明: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...
SSH,全称是Struts + Spring + Hibernate,是Java Web开发中的一个经典组合,被誉为“企业级应用开发的黄金三角”。这个SSH_3_helps.rar压缩包包含了对这三个框架的详细指南,以CHM(Compiled Help Manual)格式提供...
SSH整合是指Spring、Struts和Hibernate这三大开源框架的集成应用。这三种框架分别负责不同的职责:Spring作为应用的管理核心,提供依赖注入(DI)和面向切面编程(AOP);Struts则主要处理MVC(模型-视图-控制器)...
在SSH项目中,Spring作为整个应用的“粘合剂”,管理对象的生命周期,负责配置和连接数据库、事务管理以及服务层和控制层之间的通信。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java...
在SSH整合中,Spring主要负责管理对象(如Struts2的Action和Hibernate的Session)的生命周期和装配,以及事务管理。 1. **依赖注入(DI)**:通过配置文件或注解来管理对象及其依赖关系,降低了对象之间的耦合度。 ...
SSH(Spring、Struts、Hibernate)是Java Web开发的经典组合,这个压缩包中包含了一些关于Spring在实际使用过程中的心得和常见问题的解决方案。 首先,"spring的事务代理.txt"可能涉及到Spring的事务管理。Spring...
标题“基于SSH的家政服务系统.rar”表明这是一个关于使用SSH(Struts2 + Spring + Hibernate)技术栈开发的家政服务管理系统。SSH是Java Web开发中的经典组合,用于构建MVC模式的Web应用程序。 首先,Struts2是...
添加 Spring 支持是 SSH 项目搭建的第二步。在添加 Spring 支持时,需要右键点击项目,选择添加 Spring 3 支持,并选择要添加的类库。在这里,我们选择了 Spring 3.0 Web Libraries。 添加 Hibernate 支持 添加 ...