spring事务管理器

spring事务管理器:

pring事务管理器高层抽象主要包括3个接口:
PlatformTransactionManager事物管理器
TransactionDefinition事物的定义信息(隔离,传播,超时,只读)
TransactionStatus 事物具体运行状态


搭建转账环境:

package com.hkd.dao;

import org.springframework.jdbc.core.JdbcTemplate;


public class OrdersDao {
	//创建模板对象变量
     private JdbcTemplate jdbcTemplate;


	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
     
   //在dao层只做数据库的操作
	public void lessMoney(){
		String sql="update account set salary=salary-? where username=?";
		jdbcTemplate.update(sql, 1000, "李华");
	}
	
	public void addMoney(){
		String sql="update account set salary=salary+? where username=?";
		jdbcTemplate.update(sql, 1000, "黎明");
	}
	


}
//业务类
package com.hkd.service;

import com.hkd.dao.OrdersDao;

public class OrdersService {
	private OrdersDao ordersdao;
	public void setOrdersdao(OrdersDao ordersdao) {
		this.ordersdao = ordersdao;
	}
	//调用dao方法,业务逻辑,写转账操作
	public void account(){
		
		//调用方法实现转账
		ordersdao.addMoney();
	 
		
		ordersdao.lessMoney();
		
		
	}


}

产生的问题:
1-如果转账过程中一方出现异常的状况,如:小王转给小六一千后出现异常,小王的前少了,但是小刘的钱没有增加,那

么导致这个前丢失。

解决:添加事务解决,出现异常进行回滚操作

声明式事务管理(xml配置)
   使用aop思想进行配置
 1- 配置事务管 理器
 2-配置事务的增强
 3-配置切面

 <!-- 配置c3p0连接池 -->
     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <!-- 注入对象里面的属性值 -->
          <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
          <property name="jdbcUrl" value="jdbc:mysql:///springday03"></property>
          <property name="user" value="root"></property>
          <property name="password" value="root"></property>
     </bean>
     
     <!--*******************************************配置文件方式(aop思想)事务管理器开始********************************************  -->
     <!--第一步:部配置事务管理器  -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <!--属性值注入,指定数据库-->
           <property name="dataSource" ref="dataSource"></property>
        </bean>
        
      <!--第二步:部配置事务的增强  -->
      <!-- transaction-manager会自动指向事务管理器 -->
      <tx:advice id="txadvice" transaction-manager="transactionManager">
        <!--事务操作  -->
        <tx:attributes>
              <!--设置进行事务操作的方法匹配规则  ,匹配只能做什么规则的方法做事务,
              说明:结构固定,以后开发需要修改的就是<tx:method name="account*"/>里面的方法参数
              -->
             <tx:method name="account*"/>
        </tx:attributes>
      </tx:advice>
      
      <!--第三步:配置切面  -->
         <aop:config>
            <!-- 切入点 -->
            <aop:pointcut expression="execution(* com.hkd.service.OrdersService.*(..))" id="pointcut1"/>
            <!--切面  -->
            <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
         </aop:config>
     <!-- *******************************************事务管理器配置结束****************--> 

声明式事务管理(注解)
 
<!--*******************************************注解方式,事务管理器开始  -->
     <!--第一步:部配置事务管理器  -->
        <bean id="transactionManager" 


class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <!--属性值注入,指定数据库-->
           <property name="dataSource" ref="dataSource"></property>
        </bean>
        
      <!--第二步:开启事务的注解 -->
     <!--  transaction-manager="transactionManager"指定用的哪个事物管理器 -->
         <tx:annotation-driven transaction-manager="transactionManager"/>
      
     
     <!--  第三步:要在使用事务的方法所在类上面添加注解 -->
        
     <!-- **********************事务管理器配置结束****************--> 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值