首页 > 其他分享 >Spring事务配置笔记(实现不同Service间调用事务)

Spring事务配置笔记(实现不同Service间调用事务)

时间:2023-09-04 16:07:54浏览次数:42  
标签:事务 name Service Spring prop sessionFactory bean property id


作者:fbysss
关键字:Spring,事务处理
一、关键配置示例:


< 
  bean  
  id 
  ="sessionFactory" 
  
        class 
  ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
  > 
  
         
  < 
  property  
  name 
  ="dataSource" 
  > 
  
             
  < 
  ref  
  local 
  ="dataSource" 
    
  /> 
  
         
  </ 
  property 
  > 
  
    
         
  <!-- 
   bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/ 
  --> 
  
     
  < 
  bean  
  id 
  ="transactionManager" 
   class 
  ="org.springframework.orm.hibernate3.HibernateTransactionManager" 
  > 
  
         
  < 
  property  
  name 
  ="sessionFactory" 
  > 
  
             
  < 
  ref  
  local 
  ="sessionFactory" 
    
  /> 
  
         
  </ 
  property 
  > 
  
     
  </ 
  bean 
  > 
  

     
  <!-- 
   Hibernate Transaction Interceptor Definition  
  --> 
  
     
  < 
  bean  
  id 
  ="hibernateTransactionInterceptor" 
  
        class 
  ="org.springframework.transaction.interceptor.TransactionInterceptor" 
  
        parent 
  ="transactionIntercetorTemplate" 
  > 
  
         
  < 
  property  
  name 
  ="transactionManager" 
  > 
  
             
  < 
  bean  
  id 
  ="hibernateTransactionManager" 
  
                class 
  ="org.springframework.orm.hibernate3.HibernateTransactionManager" 
  > 
  
                 
  < 
  property  
  name 
  ="sessionFactory" 
  > 
  
                     
  < 
  ref  
  bean 
  ="sessionFactory" 
    
  /> 
  
                 
  </ 
  property 
  > 
  
             
  </ 
  bean 
  > 
  
         
  </ 
  property 
  > 
  
     
  </ 
  bean 
  > 
  

     
  <!-- 
   Transction Intercetor's Template  
  --> 
  
     
  < 
  bean  
  id 
  ="transactionIntercetorTemplate" 
   abstract 
  ="true" 
  > 
  
         
  < 
  property  
  name 
  ="transactionAttributes" 
  > 
  
             
  < 
  props 
  > 
  
                 
  < 
  prop  
  key 
  ="get*" 
  > 
  PROPAGATION_REQUIRED,readOnly 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="is*" 
  > 
  PROPAGATION_REQUIRED,readOnly 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="check*" 
  > 
  PROPAGATION_REQUIRED,readOnly 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="insert*" 
  > 
  PROPAGATION_REQUIRED 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="update*" 
  > 
  PROPAGATION_REQUIRED 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="delete*" 
  > 
  PROPAGATION_REQUIRED,-BussException 
  </ 
  prop 
  > 
  
                 
  < 
  prop  
  key 
  ="*" 
  > 
  PROPAGATION_REQUIRED 
  </ 
  prop 
  > 
  
             
  </ 
  props 
  > 
  
         
  </ 
  property 
  > 
  
     
  </ 
  bean 
  > 
  

     
  <!-- 
   定义自动代理生成器 
  --> 
  
     
  < 
  bean  
  id 
  ="autoProxyCreator" 
  
        class 
  ="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" 
  > 
  
         
  < 
  property  
  name 
  ="interceptorNames" 
  > 
  
             
  < 
  list 
  > 
  
                 
  < 
  idref  
  bean 
  ="hibernateTransactionInterceptor" 
    
  /> 
  
                 
  < 
  idref  
  bean 
  ="jdbcTransactionInterceptor" 
    
  /> 
  
             
  </ 
  list 
  > 
  
         
  </ 
  property 
  > 
  
         
  < 
  property  
  name 
  ="beanNames" 
  > 
  
             
  < 
  value 
  > 
  *Service 
  </ 
  value 
  > 
   
             
  <!-- 
  list>
                <idref bean="bookService" />                                        
            </list 
  --> 
  
             
  <!-- 
  添加Service bean 
  --> 
  
         
  </ 
  property 
  > 
  
     
  </ 
  bean 
  > 
  
     
  < 
  bean  
  id 
  ="hibernateDaoTemplate" 
   abstract 
  ="true" 
  > 
  
         
  < 
  property  
  name 
  ="sessionFactory" 
  > 
  
             
  < 
  ref  
  bean 
  ="sessionFactory" 
    
  /> 
  
         
  </ 
  property 
  > 
  
     
  </ 
  bean 
  > 
  
     
  <!-- 
   Dao 定义  
  --> 
  
     
  < 
  bean  
  id 
  ="imageDao" 
   class 
  ="com.fbyssssite.dao.ImageDao" 
  
        parent 
  ="hibernateDaoTemplate" 
    
  /> 
  
    <bean id="imageFolderDao" class="com.fbyssssite.dao.ImageFolderDao"
        parent="hibernateDaoTemplate" />
     
  <!-- 
   Service 定义  
  --> 
  
     
  < 
  bean  
  id 
  ="imageService" 
   class 
  ="com.fbyssssite.bo.ImageService" 
   autowire 
  ="byName" 
  > 
  
         
  < 
  property  
  name 
  ="dao" 
   ref 
  ="imageDao" 
  ></ 
  property 
  > 
  
     
  </ 
  bean 
  > 
      
    <bean id="imageFolderService" class="com.fbyssssite.bo.ImageFolderService" autowire="byName">
        <property name="dao" ref="imageFolderDao"></property>
    </bean>

二、测试代码:  

public     
  void 
   delete(Object entity,IBaseUser user)  
  throws 
   BussException  
  ... 
  {
   super.delete(entity, user);
   ImageFolder folder = (ImageFolder)entity;
   String folderId = folder.getId();   
   IImageService imageService  = ServiceFactory.getImageService();
   imageService.deleteAllInFolder(folderId,user);   
  }   
     public 
    
  void 
   deleteAllInFolder(String id,IBaseUser sysUser)  
  throws 
   BussException  
  ... 
  {
   log.info("删除图片夹'"+id+"'中的图片...");
   throw new BussException(1,"临时测试:测试事务是否生效的异常。测试完毕后删除此语句。",log);
   /**//*
   StringBuffer sql = new StringBuffer("delete ");
   sql.append("from ");
   sql.append(getEntityClassName());
   SqlBuilder sqlBuilder  = SqlBuilder.getInstance();
   sqlBuilder.appendWhereCondition(sql, "folderId='"+id+"'");
   bulkUpdate(sql.toString(), sysUser);
   */   
  }

三、测试效果:
抛出BussException之后,imageFolder实体并没有被删除,而是回滚了。
四、注意事项:
1.其中的 BussException是一个CheckedException(继承自Exception),这里不过是一个例子,如果其他方法需要同样的方式处理事务,也要加上-BussException,否则不能回滚;如果是一个UnCheckedException,就不需要在这里配置,默认就会回滚。
2.如果采用MySQL,show table status可以查看表的ENGINE类型,MyISAM是不支持事务的,如果需要事务,应该改成InnoDB:alter table [tablename] engine = InnoDB;

标签:事务,name,Service,Spring,prop,sessionFactory,bean,property,id
From: https://blog.51cto.com/u_16245757/7351635

相关文章

  • Xml2Bean:为Webservice返回Collection准备的一个实用类
    作者:fbysss关键字:Webservice,Xml2Bean背景:Webservice 返回的是xml,如何得到Collection类型呢?最简单的方式就是把xml还原成Collection。准备包:commons-digester-1.8.jar源代码1:Xml2Beanpackagecn.edu.ustb.db.task.util;/***//***<p>标题:Xml2Bean.java</p>......
  • SpringBoot--实用开发
    SpringBoot实用开发热部署热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!导入springboot开发者工具坐标:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo......
  • SpringCloud笔记
    微服务技术栈:                                              ......
  • SpringBoot--运维实用
    SpringBoot运维实用篇打包与运行windows打包在maven中双击package打包另外如果打包报utf-8的错,在pom中添加<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version>&l......
  • SpringBoot--基础
    SpringBoot--基础SpringBoot的设计目的是用来简化Spring应用的初始搭建以及开发过程idea创建springboot入门步骤(需要idea联网)创建一个空项目之后再项目构建中添加springboot相关配置本处的springboot版本为2.7.14,如果maven报错可以自己修改一下版本,最新的3.0版本......
  • MYSQL数据库 索引、事务
    索引定义:索引是对数据库表中一列或多列的值进行排序的一种结构(类似书的目录)。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度索引的优点:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引......
  • Spring Boot(04):让你的Spring Boot应用“火力全开”,从零开始学习starter
    ......
  • 基于springboot的个人云盘管理系统的设计与实现
    传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装个人云盘管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,个人云盘管理系统的有效运用......
  • SpringCloud中Ribbon负载均衡配置
    配置方法在启动类配置,使用此配置方法,对应全部服务都会进行该规则的负载均衡@BeanpublicIRulerandomRule(){//方法名及返回值根据下表修改即可returnnewRandomRule();}在对应yml文件配置,使用这种方法可以对某一个服务单独配置userservice:#给某个微......
  • 基于springboot流浪动物管理系统
    在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升,也为了对流浪动物信息进行更好的维护,流浪动物管理系统的出现就变得水到渠成不可缺少。通过对流浪......