真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

詳解Spring學(xué)習(xí)之編程式事務(wù)管理

前言

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),昌黎企業(yè)網(wǎng)站建設(shè),昌黎品牌網(wǎng)站建設(shè),網(wǎng)站定制,昌黎網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,昌黎網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在前面的內(nèi)容,基本已經(jīng)學(xué)習(xí)了事務(wù)的基本概念以及事務(wù)隔離級(jí)別等,接下來的幾個(gè)小節(jié),將學(xué)習(xí)怎么使用Spring進(jìn)行事務(wù)管理,在Spring中,對(duì)事務(wù)進(jìn)行管理有多種方法,主要分別編程式和聲明式,本小節(jié)主要學(xué)習(xí)編程式事務(wù)管理,后面講學(xué)習(xí)Spring的聲明式事務(wù)管理

編程式事務(wù)管理

所謂的編程式事務(wù)管理,其實(shí)就是通過編寫代碼的方式來進(jìn)行事務(wù)管理,也就是通過將事務(wù)管理的代碼硬編碼在代碼中從而達(dá)到事務(wù)管理的作用,不過Spring的事務(wù)管理不同于JDBC原始的事務(wù)管理,在JDBC中,對(duì)事務(wù)進(jìn)行管理首先要關(guān)閉自動(dòng)提交,然后采用手動(dòng)配置的方式來控制提交以及異常時(shí)回滾,而在Spring中,主要是使用Spring的接口來管理,具體如下代碼所示

這里模擬銀行轉(zhuǎn)賬的業(yè)務(wù),正如我們所知道的,轉(zhuǎn)賬其實(shí)就是從一個(gè)賬號(hào)減去金額并且給另外一個(gè)賬號(hào)增加對(duì)應(yīng)的金額

Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>


   
  

  
  
    
    
    
    
  

  
  
    
    
  

  
  
    
    
  
  
  
    
    
    
    
    
    
    
    
  


在配置事務(wù)隔離級(jí)別的時(shí)候,由于這里是采用整數(shù)的形式,而不是字符串,一開始在配置的時(shí)候有點(diǎn)摸不著頭腦,后來查看了對(duì)應(yīng)的源代碼之后,發(fā)現(xiàn)了對(duì)應(yīng)的常量,將其記錄如下

  // 事務(wù)傳播行為
  int PROPAGATION_REQUIRED = 0;
  int PROPAGATION_SUPPORTS = 1;
  int PROPAGATION_MANDATORY = 2;
  int PROPAGATION_REQUIRES_NEW = 3;
  int PROPAGATION_NOT_SUPPORTED = 4;
  int PROPAGATION_NEVER = 5;
  int PROPAGATION_NESTED = 6;

  // 事務(wù)隔離級(jí)別
  int ISOLATION_DEFAULT = -1;
  int ISOLATION_READ_UNCOMMITTED = 1;
  int ISOLATION_READ_COMMITTED = 2;
  int ISOLATION_REPEATABLE_READ = 4;
  int ISOLATION_SERIALIZABLE = 8;
  int TIMEOUT_DEFAULT = -1;

持久層代碼如下所示

@Repository
public class AccountDao {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public void transferIn(String name, double money){
    String sql = "update account set money = money + ? where name = ?";

    jdbcTemplate.update(sql, money, name);
  }

  public void transferOut(String name, double money){
    String sql = "update account set money = money - ? where name = ?";

    jdbcTemplate.update(sql, money, name);
  }
}

業(yè)務(wù)層代碼如下所示

@Service
public class AccountService {

  @Autowired
  private AccountDao accountDao;

  // 轉(zhuǎn)賬
  public void transfer(String fromName, String toName, double money){

    accountDao.transferOut(fromName, money);
    accountDao.transferIn(toName, money);
  }
}

對(duì)業(yè)務(wù)層代碼進(jìn)行檢查測(cè)試,可以看到,結(jié)果是沒有問題的,也就是轉(zhuǎn)賬是成功的

如果此時(shí)在業(yè)務(wù)代碼執(zhí)行過程中發(fā)生錯(cuò)誤或者異常,那么結(jié)果會(huì)是如何呢

比如說,通過修改transfer代碼,手動(dòng)模擬異常,如下所示

  accountDao.transferOut(fromName, money);
  int d = 1/0; // 除0異常
  accountDao.transferIn(toName, money);

此時(shí)運(yùn)行測(cè)試代碼,可以發(fā)現(xiàn),數(shù)據(jù)出現(xiàn)了不一致,金額已經(jīng)轉(zhuǎn)出了,但是由于在轉(zhuǎn)入之前發(fā)生了異常,所以無法轉(zhuǎn)入,導(dǎo)致了有一部分金額莫名其妙丟失了,這也就是為什么需要進(jìn)行事務(wù)管理了。

對(duì)業(yè)務(wù)層代碼添加事務(wù)管理,如下所示

@Service
public class AccountService {

  @Autowired
  private AccountDao accountDao;

  // 配置事務(wù)管理操作類
  @Autowired
  private TransactionTemplate transactionTemplate;


  public void transfer(final String fromName,final String toName,final double money){

    // 通過transactionTemplate進(jìn)行事務(wù)的管理
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {
      @Override
      protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
        accountDao.transferOut(fromName, money);
        int d = 1/0; // 除0異常
        accountDao.transferIn(toName, money);
      }
    });

  }
}

此時(shí)再運(yùn)行代碼,可以發(fā)現(xiàn),不管是有沒有異常,數(shù)據(jù)的一致性都得到了保證,這也就是說,事務(wù)管理起了作用

上面的內(nèi)容就是使用Spring進(jìn)行事務(wù)管理的一種方式,不過這種方式是不太方便的,因?yàn)槌艘渲檬聞?wù)管理操作類,也就是TransactionTemplate之外,當(dāng)需要進(jìn)行事務(wù)管理的時(shí)候,還需要在對(duì)應(yīng)的代碼中為其編寫相應(yīng)的管理代碼,如上所示,所以這種方式在日常的開發(fā)中比較少使用。

總結(jié)

本小節(jié)我們主要學(xué)習(xí)了如何在Spring配置事務(wù)管理器,并且通過編碼的方式,使用Spring的編程式事務(wù)管理對(duì)業(yè)務(wù)操作進(jìn)行事務(wù)管理,不過這種方式使用起來不是很方便,所以使用的頻率非常少,接下來的小節(jié)我們將學(xué)習(xí)Spring的聲明式事務(wù)管理。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


新聞名稱:詳解Spring學(xué)習(xí)之編程式事務(wù)管理
網(wǎng)站URL:http://weahome.cn/article/gpegdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部