1. 程式人生 > >spring+mybatis+Atomikos JTA事務配置說明

spring+mybatis+Atomikos JTA事務配置說明

user roo aspect code out oracle mysq nta 4.2

一、概覽

Atomikos是一個公司名字,旗下最著名的莫過於其Atomikos的事務管理器產品。產品分兩個:一個是開源的TransactionEssentials,一個是商業的ExtremeTransactions。

TransactionEssentials的主要特征:

  • JTA/XA 事務管理 —— 提供事務管理和連接池
  • 不需要應用服務器 —— TransactionEssentials可以在任何Java EE應用服務器中運行,也就是不依賴於任何應用服務器
  • 開源 —— TransactionEssentials是遵守Apache版本2許可的開源軟件
  • 專註於JDBC/JMS —— 支持所有XA資源,但是資源池和消息監聽是專供JDBC和JMS的
  • 與Spring 和 Hibernate 集成 —— 提供了描述如何與Spring和Hibernate集成的文檔

ExtremeTransactions 是基於TransactionEssentials之上的,增加了對非XA事務的支持,在servlet容器中提供了圖形化管理控制面板。Atomikos還提供了基於訂閱的支持服務,一份訂閱可以得到訪問ExtremeTransactions中額外功能的權限。

二、什麽是Atomikos TransactionsEssentials

Atomikos TransactionsEssentials 是一個為Java平臺提供增值服務的並且開源類事務管理器,以下是包括在這個開源版本中的一些功能:

  • 全面崩潰 / 重啟恢復
  • 兼容標準的SUN公司JTA API
  • 嵌套事務
  • 為XA和非XA提供內置的JDBC適配器
  • 內置的JMS適配器XA-capable JMS隊列連接器
  • 通過XA API兼容第三方適配器
  • 更好的整合您的項目
  • 集成Hibernate、mybatis等

註釋:XA:XA協議由Tuxedo首先提出的,並交給X/Open組織,作為資源管理器(數據庫)與事務管理器的接口標準。目前,Oracle、Informix、DB2和Sybase等各大數據庫廠家都提供對XA的支持。XA協議采用兩階段提交方式來管理分布式事務。XA接口提供資源管理器與事務管理器之間進行通信的標準接口。XA協議包括兩套函數,以xa_開頭的及以ax_開頭的。

三、如何使用Atomikos TransactionsEssentials

Atomikos TransactionsEssentials 是一個可靠的庫,可以加入到您的Java應用程序,也就是說為了使用這個產品,您必須添加一些jar文件(包括在dist和lib文件夾下)到您的應用程序或者應用程序服務器。

請註意:Atomikos TransactionsEssentials是一個非常快速的嵌入式事務管理器,這就意味著,您不需要另外啟動一個單獨的事務管理器進程(不要查找任何的bin文件夾)。相反,您的應用服務器將有它自己的intra-VM事務管理器。

配置需求:至少Java1.5 jdk,並且最少128M的內存

性能優化:盡管這個軟件有著很大的優勢,但是想要更好的發揮其作用,可以按以下的方法優化:

  • 更高的內存,意味著更高的吞吐量(每秒的事務數目)
  • 使連接池盡可能的大
  • 一旦你不需要的連接請馬上關閉它們。不要把你的應用程序放在緩存裏,讓內部連接池為你做這些,這將促使更高效的連接使用
  • 不要讓活動的事務閑置:終止所有情況下的事務,尤其是在異常報錯情況下的事務。這將減少數據庫的鎖定時間,並且最大效率的處理啟用的使用。

值得註意的是,在我們所有的壓力測試中,Atomikos TransactionsEssentials比J2EE的web容器更高效的吞吐量。這些測量值包括日誌記錄的高效的事務狀態,同樣,在我們所有的測量中,包括XA和non-XA,高效的效率是一樣的。

四、spring+mybatis+ Atomikos實現JTA事務

1.環境

  • Spring3.1.3
  • mybatis3.2.2
  • Atomikos3.4.2
  • jdk1.6
  • mysql5.1.51

2.創建數據庫環境,註意數據庫引擎為InnoDB,只有這樣才能支持事務

3.依賴jar包

技術分享圖片
4.配置

jta.properties也可命名為transactions.properties。如果不配置這個文件,項目也能啟動,因為幾乎所有配置項都有默認值,最好還是配置了。

jta.properties:

Xml代碼 技術分享圖片
  1. comcom.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
  2. com.atomikos.icatch.console_file_name = tm.out
  3. com.atomikos.icatch.log_base_name = tmlog
  4. comcom.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm
  5. com.atomikos.icatch.console_log_level = INFO

db.properties:

Xml代碼 技術分享圖片
  1. jdbc.xaDataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
  2. jdbcjdbc.url.a=jdbc:mysql://localhost:3306/trans_a?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
  3. jdbc.username.a=root
  4. jdbcjdbc.password.a=
  5. jdbc.uniqueResourceName.a=trans_a
  6. jdbcjdbc.url.b=jdbc:mysql://localhost:3306/trans_b?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
  7. jdbc.username.b=root
  8. jdbcjdbc.password.b=
  9. jdbc.uniqueResourceName.b=trans_b
  10. transactionManager.forceShutdown =true
  11. transactionManager.transactionTimeout=3000
  12. #*********************atomikos連接池參數設置*****************************
  13. #連接池中保留的最小連接數
  14. atomikos.minPoolSize=1
  15. #連接池中保留的最大連接數
  16. atomikos.maxPoolSize=3
  17. #最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。Default: 0
  18. atomikos.maxIdleTime=60

applicationContext-a.xml:

Xml代碼 技術分享圖片
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  15. <!-- 數據庫配置文件位置 -->
  16. <context:property-placeholder location="classpath:db.properties" />
  17. <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
  18. init-method="init" destroy-method="close">
  19. <property name="uniqueResourceName" value="${jdbc.uniqueResourceName.a}" />
  20. <property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />
  21. <property name="xaProperties">
  22. <props>
  23. <prop key="user">${jdbc.username.a}</prop>
  24. <prop key="password">${jdbc.password.a}</prop>
  25. <prop key="URL">${jdbc.url.a}</prop>
  26. </props>
  27. </property>
  28. <property name="minPoolSize" value="${atomikos.minPoolSize}" />
  29. <property name="maxPoolSize" value="${atomikos.maxPoolSize}" />
  30. <property name="maxIdleTime" value="${atomikos.maxIdleTime}" />
  31. </bean>
  32. <!-- 采用註釋的方式配置bean -->
  33. <context:annotation-config />
  34. <!-- 配置要掃描的包 -->
  35. <context:component-scan base-package="com.ssm"></context:component-scan>
  36. <!--proxy-target-class="true"強制使用cglib代理 如果為false則spring會自動選擇-->
  37. <aop:aspectj-autoproxy proxy-target-class="true"/>
  38. <!-- 配置mybitasSqlSessionFactoryBean -->
  39. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  40. <property name="dataSource" ref="dataSource" />
  41. <property name="configLocation" value="classpath:mybatis-config.xml"></property>
  42. </bean>
  43. <!-- 配置SqlSessionTemplate -->
  44. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  45. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
  46. </bean>
  47. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
  48. init-method="init" destroy-method="close">
  49. <property name="forceShutdown" value="${transactionManager.forceShutdown}" />
  50. </bean>
  51. <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
  52. <property name="transactionTimeout" value="${transactionManager.transactionTimeout}" />
  53. </bean>
  54. <bean id="transactionManager"
  55. class="org.springframework.transaction.jta.JtaTransactionManager">
  56. <property name="transactionManager">
  57. <ref bean="atomikosTransactionManager" />
  58. </property>
  59. <property name="userTransaction">
  60. <ref bean="atomikosUserTransaction" />
  61. </property>
  62. </bean>
  63. <!-- 使用annotation註解方式配置事務 -->
  64. <tx:annotation-driven transaction-manager="transactionManager"/>
  65. </beans>

applicationContext-b.xml:

Xml代碼 技術分享圖片
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  15. <!-- 數據庫配置文件位置 -->
  16. <context:property-placeholder location="classpath:db.properties" />
  17. <bean id="dataSource_b" class="com.atomikos.jdbc.AtomikosDataSourceBean"
  18. init-method="init" destroy-method="close">
  19. <property name="uniqueResourceName" value="${jdbc.uniqueResourceName.b}" />
  20. <property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />
  21. <property name="xaProperties">
  22. <props>
  23. <prop key="user">${jdbc.username.b}</prop>
  24. <prop key="password">${jdbc.password.b}</prop>
  25. <prop key="URL">${jdbc.url.b}</prop>
  26. </props>
  27. </property>
  28. <property name="minPoolSize" value="${atomikos.minPoolSize}" />
  29. <property name="maxPoolSize" value="${atomikos.maxPoolSize}" />
  30. <property name="maxIdleTime" value="${atomikos.maxIdleTime}" />
  31. </bean>
  32. <bean id="sqlSessionFactory_b" class="org.mybatis.spring.SqlSessionFactoryBean">
  33. <property name="dataSource" ref="dataSource_b" />
  34. <property name="configLocation" value="classpath:mybatis-config.xml"></property>
  35. </bean>
  36. <!-- 配置SqlSessionTemplate -->
  37. <bean id="sqlSessionTemplate_b" class="org.mybatis.spring.SqlSessionTemplate">
  38. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory_b" />
  39. </bean>
  40. </beans>

  • transactions-essentials-all.jar (552 KB)
  • 下載次數: 10
  • 查看圖片附件

spring+mybatis+Atomikos JTA事務配置說明