0 0

SPring事务怎么写配置过得怎么写到方法里面0

一个方法同时实现一个修改和新增数据。某一个失败就事务回滚。一下是方法和事务配置:
public void updateSteelTagCheckingConfirm(String steelTagId,String recReviseTime,String status,String recRevisor) throws Exception
{
List list = steelPipeLabelDao.querySteelTagChecking();
SteelTagCheckingModel steelTagCheckingModel = (SteelTagCheckingModel) list.get(0);
steelTagCheckingModel.setId(null);
steelTagCheckingModel.setRecCreateTime(new Date());
steelTagCheckingModel.setRecReviseTime(new Date());
steelTagCheckingModel.setStatus(status);
steelTagCheckingModel.setRecRevisor(recRevisor);
steelPipeLabelDao.querySteelTagCheckingConfirm(steelTagId);//修改
steelPipeLabelDao.insertSteelTagCheckingConfirm(steelTagCheckingModel);//新增


}

以下是SPring事务配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-lazy-init="false" default-dependency-check="none"
default-autowire="no">


<!-- ========================= RESOURCE DEFINITIONS ========================= -->
 
  <import resource="QuestionnaireDaoBeans.xml" />
  <import resource="QuestionnaireServiceBeans.xml" />
  <import resource="DaoBeans.xml" />
  <import resource="ServiceBeans.xml" />
  <import resource="ApplicationContext_mail.xml" />
  <import resource="ApplicationContext-ValueCode.xml" />
  <import resource="ApplicationContext-Style.xml" />
  <import resource="ApplicationContext-Supply.xml" />
  <import resource="ApplicationContext-uup.xml" />
 
 

  <import resource="ApplicationContext_logmessage.xml" />
  <import resource="ApplicationContext-message.xml" /> 
  <import resource="Application_Constants.xml" />
  <import resource="ApplicationContext-SurveyMenu.xml" />
  <import resource="ApplicationContext_webservices.xml" />

   <import resource="SteelPipeLabelDaoBeans.xml" />
   <import resource="SteelPipeLabelServiceBeans.xml" />

 
<!-- Configurer that replaces ${...} placeholders with values from a properties file --> 

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:bsteel.properties</value>
<value>classpath:javaMail.properties</value>
</list>
</property>
</bean>

<!-- Pool DataSource
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="loginTimeout">
<value>1800</value>
</property>
<property name="maxStatements">
<value>50</value>
</property>
<property name="maxStatementsPerConnection">
<value>20</value>
</property>
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>30</value>
</property>
<property name="acquireIncrement">
<value>2</value>
</property>
<property name="driverClass">
<value>${jdbc.driverClassName}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
   -->
  <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${jdbc.datasource}"/>
  </bean>

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingDirectoryLocations">
<list>
    <value>
hibernate3/com/baosight/baosteel/bsi/cs/qs/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/cs/rf/model
</value>
<value>  
hibernate3/com/baosight/baosteel/bsi/cs/ct/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/cs/sv/model
</value>
<!-- add by TanGuiyuan -->
<value>
hibernate3/com/baosight/baosteel/bsi/cs/sv2/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/cs/oq/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/common/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/helper/model
</value>
<value>
hibernate3/com/baosight/baosteel/bsi/cs/fq/model
</value>
<!-- added by frankie 2008-5-4 -->
<value>  
hibernate3/com/baosight/baosteel/bsi/cs/ce/bxgHistory/model
</value>
<value>  
hibernate3/com/baosight/baosteel/bsi/cs/ce/baoxin/model
</value>
<value>  
hibernate3/com/baosight/baosteel/bsi/cs/ce/luobao/model
</value>
<value>  
hibernate3/com/baosight/baosteel/bsi/cs/ce/model
</value>

</list>
</property>
<property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    ${hibernate.dialect}
                </prop>
                <prop key="hibernate.cache.provider_class">
                    org.hibernate.cache.EhCacheProvider
                </prop>
<prop key="hibernate.cache.use_minimal_puts">true</prop>
<prop key="hibernate.max_fetch_depth">2</prop>
<prop key="hibernate.show_sql">true</prop>
<prop
key="hibernate.bytecode.use_reflection_optimizer">
true
</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
            </props>
        </property>
</bean>


<!-- Transaction manager for a single Hibernate SessionFactory  -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<!--<prop key="*">PROPAGATION_REQUIRED</prop> -->
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="query*">PROPAGATION_REQUIRED</prop>
<prop key="list*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

</beans>
2014年6月25日 23:19

3个答案 按时间排序 按投票排序

0 0

采纳的答案

楼主如果一点概念都没有,建议先了解下底层的事物管理机制。

try{
   begin trans
    update a
    add b
   trans.commit()
}catche(e){
   trans.rollback()
}

我们现在使用spring的事物管理,实际是使用AOP的横切概念, 也就是把那些事务管理部分剥离掉

2014年6月26日 08:48
0 0

这需要使用到spring的编程式事务管理,到网上查查资料吧

2014年6月27日 13:52
0 0

1、编程式事务管理
a.这种方式用的很少,但是spring提供了模版类:org.springframework.transaction.support.TransactionTemplate.TransactionTemplate是线程安全的,可以在多个业务类中共享TransactionTemplate实例进行事务管理:

private SteelPipeLabelDao steelPipeLabelDao;//使用Spring提供的模版类构建
TransactionTemplate template;//通过IoC注入

public void updateSteelTagCheckingConfirm(String steelTagId,String recReviseTime,String status,String recRevisor) throws Exception 

List list = steelPipeLabelDao.querySteelTagChecking(); 
SteelTagCheckingModel steelTagCheckingModel = (SteelTagCheckingModel) list.get(0); 
steelTagCheckingModel.setId(null); 
steelTagCheckingModel.setRecCreateTime(new Date()); 
steelTagCheckingModel.setRecReviseTime(new Date()); 
steelTagCheckingModel.setStatus(status); 
steelTagCheckingModel.setRecRevisor(recRevisor); 

template.execute(new TransactionCallbackWithoutResult(){
protected void doInTransactionWithoutResult(TransactionStatus status){
steelPipeLabelDao.querySteelTagCheckingConfirm(steelTagId);//修改 
steelPipeLabelDao.insertSteelTagCheckingConfirm(steelTagCheckingModel);//新增
}
}
);


b.使用org.springframework.transaction.PlatformTransactionManager来实现事务管理:

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = txManager.getTransaction(def);
try {
    // execute your business logic here
}
catch (MyException ex) {
    txManager.rollback(status);
    throw ex;
}
txManager.commit(status);


2、使用XML配置声明式事务
a.使用原始的TransactionProxyFactoryBean:
<bean id="baseTransactionProxy" 
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
abstract="true" > 
<property name="transactionManager" ref="transactionManager" /> 
<property name="target">
<bean class="引入你的service对象"></bean>
</property>

<property name="transactionAttributes"> 
<props> 
<!--<prop key="*">PROPAGATION_REQUIRED</prop> --> 
<prop key="insert*">PROPAGATION_REQUIRED</prop> 
<prop key="update*">PROPAGATION_REQUIRED</prop> 
<prop key="get*">PROPAGATION_REQUIRED</prop> 
<prop key="query*">PROPAGATION_REQUIRED</prop> 
<prop key="list*">PROPAGATION_REQUIRED</prop> 
<prop key="delete*">PROPAGATION_REQUIRED</prop> 
</props> 
</property> 
</bean> 

b.基于tx/aop命名空间的配置:
package x.y.service;
           
public interface FooService {

    Foo getFoo(String fooName);

    Foo getFoo(String fooName, String barName);

    void insertFoo(Foo foo);

    void updateFoo(Foo foo);

}
         
package x.y.service;public class DefaultFooService implements FooService {
    public Foo getFoo(String fooName) {
        throw new UnsupportedOperationException();    }
    public Foo getFoo(String fooName, String barName) {
        throw new UnsupportedOperationException();    }
    public void insertFoo(Foo foo) {
        throw new UnsupportedOperationException();    }
    public void updateFoo(Foo foo) {
        throw new UnsupportedOperationException();    }}



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    <!-- 需要使用事务的service对象 -->
  <bean id="fooService" class="x.y.service.DefaultFooService"/>

<!-- 数据源 -->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
    <property name="username" value="scott"/>
    <property name="password" value="tiger"/> 
  </bean>

  <!-- 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>  </bean>

  <tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
      <tx:method name="get*" read-only="true"/>
      <tx:method name="*"/>
</tx:attributes>
  </tx:advice> 
 
  <aop:config>
    <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
  </aop:config>

</beans>

2014年6月26日 10:40

相关推荐

    Spring事务例子

    通过运行这些例子,你将对Spring事务管理有更深入的理解,知道何时选择编程式还是声明式事务,以及如何有效地处理事务异常。 总之,Spring的事务管理是其强大功能的一部分,无论是编程式还是声明式,都能帮助开发者...

    JAVA(Spring)事务管理.doc

    首先,我们来看一下Spring事务管理的核心接口`PlatformTransactionManager`。这个接口是Spring事务管理的高层次抽象,它负责真正地管理事务,包括提交、回滚以及其他的事务控制。Spring为不同的持久层技术(如JDBC、...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...

    Spring配置事务在DAO层和业务逻辑层

    #### 一、Spring事务管理概述 Spring框架提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理是通过配置来完成的,它利用Spring AOP特性,将事务管理与业务逻辑分离,使得开发者无需在...

    spring配置在DAO和事务层(DOC)

    ### Spring配置在DAO和...在上述部分配置内容中,我们看到如何在 Spring 中配置事务管理器以及如何将事务应用到 DAO 层。 **2.1 配置 HibernateTransactionManager** ```xml &lt;!— hibernateTransactionManager --&gt; ...

    配置事务通知

    【配置事务通知】是关于在IT领域中管理数据库操作的重要概念,主要涉及到程序中的事务管理和错误处理。在软件开发中,事务是确保数据一致性的重要机制,它定义了一组操作,这些操作要么全部成功,要么全部失败。事务...

    Spring+struts2+mybatis3环境配置

    综上所述,"Spring+Struts2+Mybatis3环境配置"是一个典型的Java Web开发环境搭建过程,涉及到多个层面的配置和集成,包括各个框架的核心功能、事务管理和日志记录。这个环境为开发者提供了便捷的开发体验,使得业务...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    Spring Data JPA系列4——Spring声明式事务处理与多数据源支持.doc

    在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。Spring 框架提供了声明式事务处理机制,使得业务代码中进行事务控制操作起来非常简单。只需加个@Transactional 注解即可,大大简化...

    spring与hibernate以及ibatis集成的实例和具体配置图解

    2. 配置Spring:定义DataSource、SessionFactory(对于Hibernate)和SqlSessionFactory(对于Ibatis)的bean,配置数据源、事务管理器等。 3. 配置Hibernate:创建Hibernate的实体类,编写对应的映射文件,设置...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    如果要精确到具体的类和方法,可以通过修改表达式来实现。 ##### 3.2 创建切面类 接下来,我们需要创建一个切面类来处理具体的日志记录逻辑。 ```java @Component public class SpringAopLog { @Autowired ...

    spring 3.0.5 + jotm 实现的的spring mvc 的例子

    通过这个示例项目,开发者可以学习到如何在Spring MVC项目中配置和使用外部事务管理器,这对于理解分布式系统中的事务管理以及Spring的事务策略具有重要意义。同时,它也提醒我们,随着技术的更新迭代,保持项目依赖...

    spring和mybatis整合小案例

    - **Mapper配置**:在Spring中,我们需要定义MapperScannerConfigurer来扫描所有的Mapper接口,并将它们注入到Spring容器中。 - **Mapper接口与XML配置**:每个Mapper接口对应一个XML配置文件,里面包含具体的SQL...

    Spring Boot实战与原理分析视频课程包含14-18

    --演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring Boot 监控和度量47:09 --Spring Boot内置的监控点、自定义的监控状况检查、自定义度量统计,输出等等 24 Spring Boot ...

    spring里面常见的集中数据库连接方式

    如果使用Spring Boot,数据库连接配置变得更加简洁。Spring Boot自动配置了DataSource,并提供对各种数据库的支持,只需在application.properties或application.yml中添加相应的配置项即可。 总的来说,Spring提供...

    spring boot案列

    在描述中提到的"微服务srping boot 案例demo"可能涉及到Spring Cloud,它是Spring Boot在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群...

    环境搭建spring

    5. **配置事务管理**: Spring提供了声明式事务管理,通过@Transactional注解可以在方法级别控制事务。 6. **编写Service层**: 实现业务逻辑,调用DAO进行数据操作。 7. **创建Controller**: 编写Spring MVC的...

    spring2.5所用到的jar包

    7. **事务管理**: Spring 2.5提供了声明式和编程式事务管理,使开发者能够轻松地控制事务边界。`@Transactional`注解可以在方法级别声明事务需求,简化事务管理。 8. **容器增强**: Spring 2.5的Bean容器引入了更多...

Global site tag (gtag.js) - Google Analytics