1. 程式人生 > >spring JTA多資料來源事務管理詳細教程

spring JTA多資料來源事務管理詳細教程

<context:annotation-config />
<!-- 使用註解的包路徑 -->
<context:component-scan
    base-package="com.rongli.service,com.rongli.dao,com.rongli.controller" />
<!-- 支援 @Transactional 標記 -->
<tx:annotation-driven transaction-manager="springJTATransactionManager"
    proxy-target-class
="true" /> <!-- 匯入cxf配置檔案 --> <import resource="ws.cxf.xml" /> <!-- 載入properties配置檔案 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <
value>classpath:jta.jdbc.properties</value> </list> </property> </bean> <!--公有資料庫連線池 --> <bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" abstract="true"> <property
name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /> <property name="poolSize" value="10" /> <property name="minPoolSize" value="10" /> <property name="maxPoolSize" value="30" /> <!--獲取連線失敗重新獲等待最大時間,在這個時間內如果有可用連線,將返回 --> <property name="borrowConnectionTimeout" value="60" /> <!--最大獲取資料時間,如果不設定這個值,Atomikos使用預設的5分鐘, 那麼在處理大批量資料讀取的時候,一旦超過5分鐘,就會丟擲類似 Resultset is close 的錯誤. --> <property name="reapTimeout" value="20000" /> <!-- 最大空閒時間 --> <property name="maxIdleTime" value="60" /> <!--連接回收時間 --> <property name="maintenanceInterval" value="60" /> <!--java資料庫連線池,最大可等待獲取datasouce的時間 --> <property name="loginTimeout" value="60" /> <property name="testQuery"> <value>select 1</value> </property> </bean> <!-- 客戶資料庫 --> <bean id="rlc_cus" parent="abstractXADataSource"> <property name="uniqueResourceName" value="mysql/rlc_cus" /> <property name="xaProperties"> <props> <prop key="URL">${jdbc.rlc_cus.properties}</prop> <prop key="user">${jdbc.rlc.user}</prop> <prop key="password">${jdbc.rlc.password}</prop> <prop key="pinGlobalTxToPhysicalConnection">true</prop> </props> </property> </bean> <!-- 系統資料庫 --> <bean id="rlc_sys" parent="abstractXADataSource"> <property name="uniqueResourceName" value="mysql/rlc_sys" /> <property name="xaProperties"> <props> <prop key="URL">${jdbc.rlc_sys.properties}</prop> <prop key="user">${jdbc.rlc.user}</prop> <prop key="password">${jdbc.rlc.password}</prop> <prop key="pinGlobalTxToPhysicalConnection">true</prop> </props> </property> </bean> <!-- 公有SessionFactory配置 --> <bean id="baseSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" abstract="true"> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.format_sql}</prop> <prop key="hibernate.format_sql">${hibernate.show_sql}</prop> <prop key="javax.persistence.validation.mode">none</prop> </props> </property> <!-- 自動掃描註解方式配置的hibernate類檔案 --> <property name="packagesToScan" value="com.rongli.bean"></property> </bean> <!-- sessionFactory配置 --> <!-- customer sessionFactory --> <bean id="cusSessionFactory" parent="baseSessionFactory"> <property name="dataSource" ref="rlc_cus" /> </bean> <!-- system sessionFactory --> <bean id="sysSessionFactory" parent="baseSessionFactory"> <property name="dataSource" ref="rlc_sys" /> </bean> <!-- atomikos事務管理器 --> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <!-- 呼叫終止時,強制關閉 --> <property name="forceShutdown"> <value>true</value> </property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout"> <value>2000</value> </property> </bean> <!-- spring 事務管理器 --> <bean id="springJTATransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean> <!-- 用於測試,釋出到伺服器上時刪除 --> <bean id="systemServiceImpl" class="com.rongli.service.impl.SystemServiceImpl"> </bean>

相關推薦

spring JTA資料來源事務管理詳細教程

<context:annotation-config /> <!-- 使用註解的包路徑 --> <context:component-scan base-package="com.rongli.service,com.rongli.dao,com.rongli.

Spring Boot資料來源事務管理

在開發企業應用時,對於使用者的一個操作實際上對應底層資料庫的多個讀寫。由於資料操作在順序執行的過程中,任何一步操作都有可能發生異常,異常會導致後續操作無法完成,此時由於業務邏輯並未正確的完成,之前成功操作資料的並不可靠,會產生不一致的資料,需要在這種情況下進行回退。事務的作用

Spring Boot2.0之資料來源事務管理

結合前面做的小專案,如果我把test01 test02下面的 service 都加了 事務的註解 這樣啟動時候會報錯! 事務管理器裡面不能有兩個事務!!!! 這時候需要用  @Transactional(transactionManager="test1TransactionManager")

spring boot學習6之mybatis+PageHelper分頁外掛+jta資料來源事務整合

        在專案開發中,隨著業務的擴充套件,api可能會操作多個數據庫。本博文就學習下spring boot下使用spring-boot-starter-jta-atomikos對mybatis+mysql+PageHelper分頁外掛的整合。   專案檔案結構

SpringBoot2 整合JTA元件,資料來源事務管理

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent) # 一、JTA元件簡介 ## 1、

spring配置事務管理

<tx:annotation-driven/> <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <prope

spring + mybatis 資料來源事務

1.配置Druid資料庫資料來源 <bean id="master_dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- 資料

spring 資料來源手動管理事務,最大程度保障資料一致性

模板程式碼如下: @Autowired private DataSourceTransactionManager transactionManager; public void

Spring+Mybatis+Atomikos資料來源事務一致性

1、背景 由於應用多資料來源的寫操作,一定會涉及到資料的一致性問題,由於mybatis-plus 的侷限性,採用spring+mybatis+atomikos+druid實現分散式事務一致性。 2、實現 pom.xml <?xml version="1.0" encoding="

spring資料來源+事物管理資料來源切換時間需要在事物起作用之前)

1、使用了spring的aop思想,實現了動態資料來源的切換。 2、spring的事務管理,是基於資料來源的,所以如果要實現動態資料來源切換,而且在同一個資料來源中保證事務是起作用的話,就需要注意二者的順序問題,即:在事物起作用之前就要把資料來源切換回來。    

Spring資料來源事務處理機制

最近有spring配置多資料來源,中間用了aop來完成動態的切換,發現一些地方不是很明白,在AbstractRoutingDataSource這個類中有determineCurrentLookupKey的方法,另外我在所有DAO層方法上添加了before的切面,按理說,如果

Spring, MyBatis 資料來源的配置和管理

原文連結:http://www.2cto.com/kf/201505/400273.html 同一個專案有時會涉及到多個數據庫,也就是多資料來源。多資料來源又可以分為兩種情況: 1)兩個或多個數據庫沒有相關性,各自獨立,其實這種可以作為兩個專案來開

Spring 資料來源事務配置問題

在SpringSide 3 中,白衣提供的預先配置好的環境非常有利於使用者進行快速開發,但是同時也會為擴充套件帶來一些困難。最直接的例子就是關於在專案中使用多個數據源的問題,似乎 很難搞。在上一篇中,我探討了SpringSide 3 中的資料訪問層,在這一篇中,我立志要解決多

Spring Boot 資料來源動態切換開啟事務後,資料來源切換失敗

在專案中遇到需要使用多資料來源的情況,解決辦法是,使用註解,切面攔截來注入不同的dataSource。實現程式碼在底部。基本思路:在dao的方法前加上@TargetDataSource(ORDER_DATA_SOURCE)註解來表明使用的哪個資料來源。問題:事務開啟一般是在s

全面分析 Spring 的程式設計式事務管理及宣告式事務管理 (超詳細)

小結: 程式設計式事務管理:       1 基於底層API(platFormTransactionManager, TransactionStauts,,TransactionDefinition) 的程式設計式事務管理   2. 基於TransactionTemplat

spring boot資料來源配置,資料來源事務

springboot目錄 需求描述 在業務開發中,需要讀寫分離,或者需要配置多個數據源,接下來我們看看在springboot中如何配置多資料來源,支援事務。 想知道springboot如何載入配置以及選擇使用哪個連線池,請移步 app

馬士兵Spring-聲明式事務管理-annotation

con his pri 默認值 bsp nco cti generated span 1.事務加在DAO層還是service層? service中可能多涉及多種DAO的操作,比如存了一個User之後,需要保存一條日誌信息;如果在DAO中分別設置事務的話,一個DAO下面方法拋

spring支持的事務管理

持久化 完成 nes 標簽 什麽 異常 管理器 ont 文件中 1、編程式事務: 需在spring.xml配置文件中, 1、配置數據源、 2、持久化模板(jdbc模板、hibernate模板、mybatis模板)、 對象裏面註入的是數據源及框架的屬性配置; 3

SSM(Spring+SpringMVC+Mybatis)框架搭建詳細教程【附源代碼Demo】

oid rep images end 訪問靜態文件 into *** 寫到 where http://www.cnblogs.com/qixiaoyizhan/p/7751732.html 【前言】   應某網絡友人邀約,需要一個SSM框架的Demo作為基礎學習資料,於

Spring 框架系列之事務管理

操作 提交 目標 form 重復 表達 required supports 嵌套事務 1、事務回顧 (1)、什麽是事務: 事務是邏輯上的一組操作,組成這組操作的各個邏輯單元,要麽一起成功,要麽一起失敗。 (2)、事務特性(ACID) 原子性 :強調事務的不可分割 一致性