欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring事务管理器

程序员文章站 2022-05-23 18:27:41
...

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"/>
      
     
     <!--  第三步:要在使用事务的方法所在类上面添加注解 -->
        
     <!-- **********************事务管理器配置结束****************-->