-
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个答案 按时间排序 按投票排序
-
采纳的答案
楼主如果一点概念都没有,建议先了解下底层的事物管理机制。
try{ begin trans update a add b trans.commit() }catche(e){ trans.rollback() }
我们现在使用spring的事物管理,实际是使用AOP的横切概念, 也就是把那些事务管理部分剥离掉2014年6月26日 08:48
-
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事务管理的核心接口`PlatformTransactionManager`。这个接口是Spring事务管理的高层次抽象,它负责真正地管理事务,包括提交、回滚以及其他的事务控制。Spring为不同的持久层技术(如JDBC、...
前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...
#### 一、Spring事务管理概述 Spring框架提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理是通过配置来完成的,它利用Spring AOP特性,将事务管理与业务逻辑分离,使得开发者无需在...
### Spring配置在DAO和...在上述部分配置内容中,我们看到如何在 Spring 中配置事务管理器以及如何将事务应用到 DAO 层。 **2.1 配置 HibernateTransactionManager** ```xml <!— hibernateTransactionManager --> ...
【配置事务通知】是关于在IT领域中管理数据库操作的重要概念,主要涉及到程序中的事务管理和错误处理。在软件开发中,事务是确保数据一致性的重要机制,它定义了一组操作,这些操作要么全部成功,要么全部失败。事务...
综上所述,"Spring+Struts2+Mybatis3环境配置"是一个典型的Java Web开发环境搭建过程,涉及到多个层面的配置和集成,包括各个框架的核心功能、事务管理和日志记录。这个环境为开发者提供了便捷的开发体验,使得业务...
在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...
在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。Spring 框架提供了声明式事务处理机制,使得业务代码中进行事务控制操作起来非常简单。只需加个@Transactional 注解即可,大大简化...
2. 配置Spring:定义DataSource、SessionFactory(对于Hibernate)和SqlSessionFactory(对于Ibatis)的bean,配置数据源、事务管理器等。 3. 配置Hibernate:创建Hibernate的实体类,编写对应的映射文件,设置...
如果要精确到具体的类和方法,可以通过修改表达式来实现。 ##### 3.2 创建切面类 接下来,我们需要创建一个切面类来处理具体的日志记录逻辑。 ```java @Component public class SpringAopLog { @Autowired ...
通过这个示例项目,开发者可以学习到如何在Spring MVC项目中配置和使用外部事务管理器,这对于理解分布式系统中的事务管理以及Spring的事务策略具有重要意义。同时,它也提醒我们,随着技术的更新迭代,保持项目依赖...
- **Mapper配置**:在Spring中,我们需要定义MapperScannerConfigurer来扫描所有的Mapper接口,并将它们注入到Spring容器中。 - **Mapper接口与XML配置**:每个Mapper接口对应一个XML配置文件,里面包含具体的SQL...
--演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring Boot 监控和度量47:09 --Spring Boot内置的监控点、自定义的监控状况检查、自定义度量统计,输出等等 24 Spring Boot ...
如果使用Spring Boot,数据库连接配置变得更加简洁。Spring Boot自动配置了DataSource,并提供对各种数据库的支持,只需在application.properties或application.yml中添加相应的配置项即可。 总的来说,Spring提供...
在描述中提到的"微服务srping boot 案例demo"可能涉及到Spring Cloud,它是Spring Boot在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群...
5. **配置事务管理**: Spring提供了声明式事务管理,通过@Transactional注解可以在方法级别控制事务。 6. **编写Service层**: 实现业务逻辑,调用DAO进行数据操作。 7. **创建Controller**: 编写Spring MVC的...
7. **事务管理**: Spring 2.5提供了声明式和编程式事务管理,使开发者能够轻松地控制事务边界。`@Transactional`注解可以在方法级别声明事务需求,简化事务管理。 8. **容器增强**: Spring 2.5的Bean容器引入了更多...