Spring多資料來源事務處理機制
最近有spring配置多資料來源,中間用了aop來完成動態的切換,發現一些地方不是很明白,在AbstractRoutingDataSource這個類中有determineCurrentLookupKey的方法,另外我在所有DAO層方法上添加了before的切面,按理說,如果呼叫了某一個DAO層的方法,應該是先呼叫切面的方法,然後再呼叫determineCurrentLookupKey方法,最後才是DAO層的方法,可是我除錯的結果是determineCurrentLookupKey方法,其次切面,最後DAO,不是很理解AbstractRoutingDataSource的呼叫過程。
原因:當在service層呼叫dao層進行資料庫處理時,若service 沒有啟動事務機制,則執行的順序為:切面——>
如:
@Transactional(propagation = Propagation.REQUIRED) //順序為:切面——>determineCurrentLookupKey——>Dao方法
public String getJsonList(PageBean page,Map<String,String> map,String className,String order){
List<T> list=new ArrayList<T>();
if(order.equals("null"))
list=getList(page,map,className);
else
list=getList(page,map,className,order);
int rowCount = dao.getCount("select count(*) from "+className+Utils.getHql(map));
HashMap<String, Object> tempMap = new HashMap<String, Object>();
tempMap.put("Rows", list);
tempMap.put("Total", rowCount);
JSONObject json = new JSONObject();
json.putAll(tempMap);
return json.toString();
}
@Transactional(propagation = Propagation.SUPPORTS)//順序為:determineCurrentLookupKey——>切面——>Dao方法
public String getJsonList(PageBean page,Map<String,String> map,String className,String order){
List<T> list=new ArrayList<T>();
if(order.equals("null"))
list=getList(page,map,className);
else
list=getList(page,map,className,order);
int rowCount = dao.getCount("select count(*) from "+className+Utils.getHql(map));
HashMap<String, Object> tempMap = new HashMap<String, Object>();
tempMap.put("Rows", list);
tempMap.put("Total", rowCount);
JSONObject json = new JSONObject();
json.putAll(tempMap);
return json.toString();
}
相關推薦
Spring多資料來源事務處理機制
最近有spring配置多資料來源,中間用了aop來完成動態的切換,發現一些地方不是很明白,在AbstractRoutingDataSource這個類中有determineCurrentLookupKey的方法,另外我在所有DAO層方法上添加了before的切面,按理說,如果
Spring 多資料來源事務配置問題
在SpringSide 3 中,白衣提供的預先配置好的環境非常有利於使用者進行快速開發,但是同時也會為擴充套件帶來一些困難。最直接的例子就是關於在專案中使用多個數據源的問題,似乎 很難搞。在上一篇中,我探討了SpringSide 3 中的資料訪問層,在這一篇中,我立志要解決多
Spring Boot2.0之多資料來源事務管理
結合前面做的小專案,如果我把test01 test02下面的 service 都加了 事務的註解 這樣啟動時候會報錯! 事務管理器裡面不能有兩個事務!!!! 這時候需要用 @Transactional(transactionManager="test1TransactionManager")
Spring+Mybatis+Atomikos多資料來源事務一致性
1、背景 由於應用多資料來源的寫操作,一定會涉及到資料的一致性問題,由於mybatis-plus 的侷限性,採用spring+mybatis+atomikos+druid實現分散式事務一致性。 2、實現 pom.xml <?xml version="1.0" encoding="
Spring Boot多資料來源事務管理
在開發企業應用時,對於使用者的一個操作實際上對應底層資料庫的多個讀寫。由於資料操作在順序執行的過程中,任何一步操作都有可能發生異常,異常會導致後續操作無法完成,此時由於業務邏輯並未正確的完成,之前成功操作資料的並不可靠,會產生不一致的資料,需要在這種情況下進行回退。事務的作用
Spring 多資料來源 @Transactional 註解事務管理
在 Spring,MyBatis 下兩個資料來源,通過 @Transactional 註解 配置簡單的事務管理 spring-mybatis.xml <!--******************************** data one start *********
spring boot學習6之mybatis+PageHelper分頁外掛+jta多資料來源事務整合
在專案開發中,隨著業務的擴充套件,api可能會操作多個數據庫。本博文就學習下spring boot下使用spring-boot-starter-jta-atomikos對mybatis+mysql+PageHelper分頁外掛的整合。 專案檔案結構
Spring事務處理機制
常用的事務處理方式: 手動處理事務 註解式事務 AOP宣告事務資料庫訪問時,就不需要開啟Session、開啟事務,提交事務、關閉 Session。由AOP指定的事務管理器,在方法(資料庫訪
spring JTA多資料來源事務管理詳細教程
<context:annotation-config /> <!-- 使用註解的包路徑 --> <context:component-scan base-package="com.rongli.service,com.rongli.dao,com.rongli.
spring + mybatis 多資料來源事務
1.配置Druid資料庫資料來源 <bean id="master_dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- 資料
spring多資料來源動態切換及事務
原文地址:http://blog.csdn.net/liuxiao723846/article/details/43526549 1、使用了spring的aop思想,實現了動態資料來源的切換。 2、spring的事務管理,是基於資料來源的,所以如果要實現動態資料來源切換,而且在同一個資料來源中保證事
spring boot多資料來源配置,多資料來源事務
springboot目錄 需求描述 在業務開發中,需要讀寫分離,或者需要配置多個數據源,接下來我們看看在springboot中如何配置多資料來源,支援事務。 想知道springboot如何載入配置以及選擇使用哪個連線池,請移步 app
spring多資料來源的配置(分散式事務管理)
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResource
spring 多資料來源手動管理事務,最大程度保障資料一致性
模板程式碼如下: @Autowired private DataSourceTransactionManager transactionManager; public void
原始碼分析 spring事務處理機制
Spring在TransactionDefinition介面中定義這些屬性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是Spring事務管理的核心介面。介面程式碼如下: public interface
spring多資料來源配置 簡單明瞭
來源地址https://blog.csdn.net/ll535299/article/details/78203634 1.首先在config.properties檔案中配置兩個資料庫連線的基本資料。這個省略了 2.在spring配置檔案中配置這兩個資料來源:&nb
Spring事務控制--Spring中的事務處理
事務回顧 1)什麼是事務? 事務是邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗。 2)事務的特性(ACID) 原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作要麼全部完成,要麼完全不起作用。
實現多資料來源事務
最近在重構專案中,需要相容多資料來源,故此實現下多資料來源事務。 這次重構專案中,為了支援後續龐大的資料量接入,更迭了資料庫,但是為了要相容老版本,也不能直接拿掉老的資料庫。所以就有了相容多資料來源的需求,尤其是要保證事務。 其實這個需求就是要實現分散式事務,但是我們的這個場景是在一個服務內,所
springboot 動態多資料來源事務
由於近期專案要對資料庫進行劃分成多個數據庫,從當一的資料庫,根據業務進行劃分多個數據庫,所以使用動態路由+aop來實現資料庫的動態切換,當是其中有一個重要的問題,就是事務要怎麼解決,比如在一個service中對其他業務資料庫進行查詢,修改,新增,會出現資料來源不會進行切換的問
springboot+mybaits-plus 多資料來源+事務操作(親測有效)
乾貨 配置檔案 @Configuration @MapperScan({ "com.cn.springboot.*.mapper**"}) public class DynamicDataSourceConfig { /** * 在方法上註解c