1、实现类:
其中貌似insert加入try catch 否则事务失效。例如这样
2、配置文件
getBean的时候获取代理类,及userdaoproxy。
或者
package cn.com.gan.spring.database; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import javax.sql.DataSource; public class UserDao implements IUserDao { // private DataSource dataSource; private JdbcTemplate jdbcTemplate; // private PlatformTransactionManager tm; //private DefaultTransactionDefinition df; public void setDataSource(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //tm=new DataSourceTransactionManager(dataSource); //df=new DefaultTransactionDefinition(); //df.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED); } @Override public List<User> find(String name) { List<Map> list = jdbcTemplate .queryForList("select * from user where name='" + name + "'"); User user = null; List<User> relist=new ArrayList<User>(); for (Map map : list) { user = new User(); user.setName(map.get("name").toString()); user.setAge(Short.parseShort(map.get("age").toString())); relist.add(user); } return relist; } @Override public void insert(User user) { //TransactionStatus ts=tm.getTransaction(df); jdbcTemplate.update("insert into user(name,age) values(?,?)", new Object[] { user.getName(), user.getAge() }); jdbcTemplate.update("insert into user(name,age) values(?,?)", new Object[] { user.getName(), user.getAge() }); //tm.commit(ts); } }
其中貌似insert加入try catch 否则事务失效。例如这样
package cn.com.gan.spring.database; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import javax.sql.DataSource; public class UserDao implements IUserDao { // private DataSource dataSource; private JdbcTemplate jdbcTemplate; // private PlatformTransactionManager tm; //private DefaultTransactionDefinition df; public void setDataSource(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //tm=new DataSourceTransactionManager(dataSource); //df=new DefaultTransactionDefinition(); //df.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED); } @Override public List<User> find(String name) { List<Map> list = jdbcTemplate .queryForList("select * from user where name='" + name + "'"); User user = null; List<User> relist=new ArrayList<User>(); for (Map map : list) { user = new User(); user.setName(map.get("name").toString()); user.setAge(Short.parseShort(map.get("age").toString())); relist.add(user); } return relist; } @Override public void insert(User user) { //TransactionStatus ts=tm.getTransaction(df); try{ jdbcTemplate.update("insert into user(name,age) values(?,?)", new Object[] { user.getName(), user.getAge() }); jdbcTemplate.update("insert into user(name,age) values(?,?)", new Object[] { user.getName(), user.getAge() }); }catch(Exception e){ e.printStackTrace(); return ; } //tm.commit(ts); } }好像事务就失效了。
2、配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> --> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url"> <value>jdbc:mysql://localhost/test</value> </property> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>pass</value> </property> </bean> <bean id="userdao" class="cn.com.gan.spring.database.UserDao"> <property name="dataSource"> <ref local="ds" /> </property> </bean> <bean id="tranmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"></property> </bean> <bean id="userdaoproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="proxyInterfaces"> <value>cn.com.gan.spring.database.IUserDao</value> </property> <property name="target" ref="userdao"></property> <property name="transactionManager"> <ref local="tranmanager" /> </property> <property name="transactionAttributes"> <props> <prop key="insert">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>
getBean的时候获取代理类,及userdaoproxy。
或者
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> --> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url"> <value>jdbc:mysql://localhost/test</value> </property> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>pass</value> </property> </bean> <bean id="userdao" class="cn.com.gan.spring.database.UserDao"> <property name="dataSource"> <ref local="ds" /> </property> </bean> <bean id="tranmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"></property> </bean> <bean id="interceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="tranmanager"></property> <property name="transactionAttributeSource" value="cn.com.gan.spring.database.IUserDao.insert=PROPAGATION_REQUIRED"> </property> </bean> <bean id="userdaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>cn.com.gan.spring.database.IUserDao</value> </property> <property name="target" ref="userdao"></property> <!-- <property name="transactionAttributes"> <props> <prop key="insert">PROPAGATION_REQUIRED</prop> </props> </property> --> <property name="interceptorNames"> <list> <value>interceptor</value> </list> </property> </bean> </beans>
发表评论
-
spring ioc
2012-06-26 17:38 9501、 Resorce:对配置文件 ... -
springside3中的PropertyFilter
2012-05-08 16:37 1005filter_{EQ(=)|NE(<>)|GT(& ... -
spring事务管理(声明式 xmlschmea)
2011-08-24 20:47 865配置文件如下:引入了tx的命名空间。 <?xml v ... -
spring事务管理(编程式)
2011-08-22 21:37 11241、关键抽象类: package org.springf ... -
基于API 的spring aop(XML Schema)
2011-08-19 21:18 11951、接口类 package cn.com.gan.spring ... -
基于API 的spring aop(自动代理)
2011-08-19 20:00 926BeanNameAutoProxyCreator通过匹配bea ... -
基于API 的spring aop (advisor)
2011-08-19 11:23 23801、advisor是pointcut和advice的桥梁 pu ... -
基于API 的spring aop
2011-08-16 20:24 755接口类 package cn.com.gan.spring ... -
Spring学习笔录
2011-08-10 00:41 0一、beanFactory 和ApplicationConte ...
相关推荐
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。
本教程将深入探讨 Spring 的编程式事务管理和声明式事务管理,帮助你理解这两种方式的差异与应用场景。 首先,编程式事务管理依赖于编程的方式显式地控制事务的开始、提交、回滚等操作。它通过实现 `...
本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...
本文将详细解释 Spring 的编程式事务管理及声明式事务管理,帮助读者理清思路。 事务管理的重要性 事务管理对于企业应用至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏...
1. **Spring事务管理器(Transaction Manager)**: - Spring支持多种事务管理器,如DataSourceTransactionManager(用于JDBC事务)和HibernateTransactionManager(用于Hibernate)。事务管理器是负责处理事务的...
Spring声明式事务配置管理方法
1. **Spring事务管理** Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁...
2. **Spring事务管理**:Spring提供了两种事务管理方式,即编程式事务管理和声明式事务管理。编程式事务管理通过TransactionTemplate或直接调用PlatformTransactionManager接口的方法来管理事务,而声明式事务管理则...
本主题将深入探讨Hibernate的编程式事务管理和Spring AOP的声明式事务管理,以及两者如何在实际项目中集成使用。 **Hibernate编程式事务管理** Hibernate作为流行的ORM(对象关系映射)框架,提供了对JDBC事务的...
在整个源代码分析中,我们可以看到 Spring 实现声明式事务管理有三个部分: 1. 对在上下文中配置的属性的处理,这里涉及的类是 TransactionAttributeSourceAdvisor,这是一个通知器,用它来对属性值进行处理,属性...
首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...
Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### 描述分析:XML配置示例 提供的XML配置...
本篇文章将深入探讨Spring中的两种主要事务管理方式:编程式事务管理和声明式事务管理。 1. 编程式事务管理: 编程式事务管理允许开发者直接在代码中控制事务的开始、提交、回滚等操作。这种方式具有较高的灵活性,...
Spring事务管理分为编程式事务管理和声明式事务管理两种方式。编程式事务管理通过使用PlatformTransactionManager接口的begin、commit、rollback等方法直接控制事务的生命周期,这种方式灵活但容易导致代码过于繁琐...
在Spring中,事务管理分为编程式和声明式两种方式,而声明式事务处理则是通过配置来控制事务的行为,使得代码与事务逻辑解耦,提高了代码的可读性和可维护性。 首先,我们要理解什么是事务。事务是数据库操作的一组...