国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于Spring中的事務管理機制

SnaiLiu / 2189人閱讀

摘要:中的事務管理分類編程式事務管理機制聲明式事務管理機制下面就銀行轉賬這一實例來講解如何利用這兩種由提供的事務處理機制來進行相應的事務處理。

什么是事務?

通俗理解,事務其實就是一系列指令的集合。

為什么要使用事務管理?
我們在實際業務場景中,經常會遇到數據頻繁修改讀取的問題。在同一時刻,不同的業務邏輯對同一個表數據進行修改,這種沖突很可能造成數據不可挽回的錯亂,所以我們需要用事務來對數據進行管理。
事務的四個特性:

原子性
原子性:操作這些指令時,要么全部執行成功,要么全部不執行。只要其中一個指令執行失敗,所有的指令都執行失敗,數據進行回滾,回到執行指令前的數據狀態。

一致性
事務的執行使數據從一個狀態轉換為另一個狀態,但是對于整個數據的完整性保持穩定。

隔離性
在該事務執行的過程中,無論發生的任何數據的改變都應該只存在于該事務之中,對外界不存在任何影響。只有在事務確定正確提交之后,才會顯示該事務對數據的改變。其他事務才能獲取到這些改變后的數據。

持久性
當事務正確完成后,它對于數據的改變是永久性的。

Spring中的事務管理分類:

編程式事務管理機制

聲明式事務管理機制

下面就銀行轉賬這一實例來講解如何利用這兩種由Spring提供的事務處理機制來進行相應的事務處理。

項目前準備工作:

在項目中導入相應的jar包

編寫項目相應的接口和接口實現類,本項目有兩個接口--【AccountService,AccountDAO】,兩個接口實現類--【AccountServiceImpl,AccountDAOImpl】,具體代碼如下:

               **AccountService接口**

package cn.muke.spring.demo1;
/**

* @author 熊濤

 *銀行轉賬的業務層接口
 */
public interface AccountService {

    /*
     * @param out:轉出賬戶
     * @param in:轉入賬戶
     * @param money:轉賬金額
     */
    public void transfer(String out,String in,Double money);
    
}


            **AccountService接口實現類AccountServiceImpl**
package cn.muke.spring.demo1;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
public class AccountServiceImpl implements AccountService {    
    //注入轉賬的DAO
    private AccountDAO accountDao;    
    //注入事務管理的模板
    private TransactionTemplate transactionTemplate;

    /**
     * @param out    :轉出賬號
     * @param in    :轉入賬號
     * @param money    :轉賬金額
     */
    @Override
    public void transfer(final String out, final String in, final Double money) {
            
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {

            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                accountDao.outMoney(out, money);
                int i = 1/0;
                accountDao.inMoney(in, money);
            }
        });
    }

    public void setAccountDao(AccountDAO accountDao) {
        this.accountDao = accountDao;
    }

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }

}
           
           **AccountDAO接口**


package cn.muke.spring.demo1;
/**
 * @author 熊濤
 *轉賬案例DAO層的接口
 */
public interface AccountDAO {

    /*
     * @param out:轉出賬號
     * @param money:轉賬金額
     */
    public void outMoney(String out,Double money);
    /*
     * @param in:轉入賬戶
     * @param money:轉賬金額
     */
    public void inMoney(String in,Double money);
}


                    **AccountDAO接口的實現類AccountDAOImpl**

package cn.muke.spring.demo1;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**

@author 熊濤

*轉賬案例DAO層的實現類
*/
public class AccountDAOImpl extends JdbcDaoSupport implements AccountDAO {

/*
 * @param out:轉出賬號
 * @param money:轉賬金額
 */
@Override
public void outMoney(String out, Double money) {
    
    String sql = "update account set money = money - ? where name = ? ";
    this.getJdbcTemplate().update(sql, money,out);
}

/*
 * @param in:轉入賬戶
 * @param money:轉賬金額
 */
@Override
public void inMoney(String in, Double money) {
    
    String sql = "update account set money = money + ? where name = ? ";
    this.getJdbcTemplate().update(sql, money,in);
}

}

編程式事務管理機制
package cn.muke.spring.demo1;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
public class AccountServiceImpl implements AccountService {    
    //注入轉賬的DAO
    private AccountDAO accountDao;    
    //注入事務管理的模板
    private TransactionTemplate transactionTemplate;

    /**
     * @param out    :轉出賬號
     * @param in    :轉入賬號
     * @param money    :轉賬金額
     */
    @Override
    public void transfer(final String out, final String in, final Double money) {            
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                accountDao.outMoney(out, money);
                int i = 1/0;
                accountDao.inMoney(in, money);
            }
        });
    }
    public void setAccountDao(AccountDAO accountDao) {
        this.accountDao = accountDao;
    }
    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }
}

解釋:主要是通過transaction提供的模板來進行事務的處理。

使用聲明式的方法進行事務處理 【1】基于TransactionProxyFactoryBean的事務處理機制

要點:(1)主要是在Spring的配置文件中配置業務層的代理,代碼例如:


            
            
            
            
            
        
            
                
                PROPAGATION_REQUIRED
                
                
            
        
    

(2)在使用業務層時需注入業務層的代理

 @Resource(name="accountServiceProxy")
 
 

【2】基于AspectJ的XML方式

此種方式是利用了Spring AOP這一特性完成事務管理機制。其要點是配置事務通知和切面和切點,而且此種代理為自動代理。其在Spring配置文件的配置如下:
 
    
        
            
        
    
    
    
    
        
        
        
        
    

【3】基于注解的事務管理機制

其要點是在Spring配置文件完成事務的開啟,另外還需在需要進行事務管理的業務層類出標記上事務的關鍵字,@Tansactional       

最后附上對于該項目的源碼,源碼中有一個名為database的文件改文件有關于創建數據庫的sql語句,另外源碼中海油對于每一種事務管理機制的測試類。
鏈接:https://pan.baidu.com/s/1hspMvnY 密碼:g2h7

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70877.html

相關文章

  • 2021 年最新基于 Spring Cloud 的微服務架構分析

    摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...

    cikenerd 評論0 收藏0
  • Spring Cloud 分布式事務管理

    摘要:中大致分為兩部分事務管理器和本地資源管理器。具體實現分布式事務框架的核心功能是對本地事務的協調控制,框架本身并不創建事務,只是對本地事務做協調控制。 Spring Cloud 分布式事務管理 在微服務如火如荼的情況下,越來越多的項目開始嘗試改造成微服務架構,微服務即帶來了項目開發的方便性,又提高了運維難度以及網絡不可靠的概率. @[toc]在說微服務的優缺點時,有對比才會更加明顯,首先...

    aboutU 評論0 收藏0
  • Java相關

    摘要:本文是作者自己對中線程的狀態線程間協作相關使用的理解與總結,不對之處,望指出,共勉。當中的的數目而不是已占用的位置數大于集合番一文通版集合番一文通版垃圾回收機制講得很透徹,深入淺出。 一小時搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關聯任何信息和著任何元數據(metadata)的途徑和方法。Annotion(注解) 是一個接口,程序可以通過...

    wangtdgoodluck 評論0 收藏0

發表評論

0條評論

SnaiLiu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<