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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章