`
白色熊猫
  • 浏览: 17438 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

spring事务管理(声明式)

阅读更多
1、实现类:
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 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。

    全面分析_Spring_的编程式事务管理及声明式事务管理

    本教程将深入探讨 Spring 的编程式事务管理和声明式事务管理,帮助你理解这两种方式的差异与应用场景。 首先,编程式事务管理依赖于编程的方式显式地控制事务的开始、提交、回滚等操作。它通过实现 `...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...

    spring编程式事务与声明式事务详解

    本文将详细解释 Spring 的编程式事务管理及声明式事务管理,帮助读者理清思路。 事务管理的重要性 事务管理对于企业应用至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏...

    spring声明式事务管理配置方式

    1. **Spring事务管理器(Transaction Manager)**: - Spring支持多种事务管理器,如DataSourceTransactionManager(用于JDBC事务)和HibernateTransactionManager(用于Hibernate)。事务管理器是负责处理事务的...

    Spring声明式事务配置管理方法

    Spring声明式事务配置管理方法

    spring+mybatis的声明式事务

    1. **Spring事务管理** Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁...

    Spring事务管理开发必备jar包

    2. **Spring事务管理**:Spring提供了两种事务管理方式,即编程式事务管理和声明式事务管理。编程式事务管理通过TransactionTemplate或直接调用PlatformTransactionManager接口的方法来管理事务,而声明式事务管理则...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    本主题将深入探讨Hibernate的编程式事务管理和Spring AOP的声明式事务管理,以及两者如何在实际项目中集成使用。 **Hibernate编程式事务管理** Hibernate作为流行的ORM(对象关系映射)框架,提供了对JDBC事务的...

    Spring源代码解析(六):Spring声明式事务处理.doc

    在整个源代码分析中,我们可以看到 Spring 实现声明式事务管理有三个部分: 1. 对在上下文中配置的属性的处理,这里涉及的类是 TransactionAttributeSourceAdvisor,这是一个通知器,用它来对属性值进行处理,属性...

    spring声明式事务处理demo

    首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...

    spring声明式事务配置

    Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### 描述分析:XML配置示例 提供的XML配置...

    全面分析_Spring_的编程式事务管理及声明式事务管理.

    本篇文章将深入探讨Spring中的两种主要事务管理方式:编程式事务管理和声明式事务管理。 1. 编程式事务管理: 编程式事务管理允许开发者直接在代码中控制事务的开始、提交、回滚等操作。这种方式具有较高的灵活性,...

    Spring声明式事务处理

    在Spring中,事务管理分为编程式和声明式两种方式,而声明式事务处理则是通过配置来控制事务的行为,使得代码与事务逻辑解耦,提高了代码的可读性和可维护性。 首先,我们要理解什么是事务。事务是数据库操作的一组...

Global site tag (gtag.js) - Google Analytics