1.spring配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:util="http://www.springframework.org/schema/util"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-3.1.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop.xsd
  15. http://www.springframework.org/schema/util
  16. http://www.springframework.org/schema/util/spring-util-3.1.xsd
  17. ">
  18.  
  19. <!--使用@Autowired注解,需要注入下bean-->
  20. <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
  21.  
  22. <context:component-scan base-package="com.tykj.weatherservice" annotation-config="false" />
  23.  
  24. <!--实际上,PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义的工具。-->
  25. <bean id="propertyConfigurer"
  26. class="com.tykj.secondparty.context.CustomizedPropertyPlaceholderConfigurer">
  27. <property name="locations">
  28. <list>
  29. <value>classpath:/system.properties</value>
  30. <value>classpath:/jdbc.properties</value>
  31. </list>
  32. </property>
  33. </bean>
  34.  
  35. <bean id="settings"
  36. class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  37. <property name="locations">
  38. <list>
  39. <value>classpath:/system.properties</value>
  40. </list>
  41. </property>
  42. <property name="fileEncoding">
  43. <value>UTF-8</value>
  44. </property>
  45. </bean>
  46.  
  47. <!-- 多个数据源的功用配置,方便下面直接引用 -->
  48. <bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" abstract="true">
  49. <property name="poolSize" value="${mysql_poolSize}" />
  50. <property name="minPoolSize" value="${mysql_minPoolSize}"/>
  51. <property name="maxPoolSize" value="${mysql_maxPoolSize}"/>
  52. <property name="borrowConnectionTimeout" value="${borrowConnectionTimeout}"/>
  53. <property name="reapTimeout" value="${mysql_reapTimeout}"/>
  54. <!-- 最大空闲时间 -->
  55. <property name="maxIdleTime" value="${mysql_maxIdleTime}"/>
  56. <property name="maintenanceInterval" value="${mysql_maintenanceInterval}" />
  57. <property name="loginTimeout" value="${mysql_loginTimeout}"/>
  58. <property name="logWriter" value="${mysql_logWriter}"/>
  59. </bean>
  60.  
  61. <!--测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean-->
  62. <!-- <bean id="dataSourceOracle" class="com.atomikos.jdbc.AtomikosDataSourceBean"
  63. init-method="init" destroy-method="close">
  64. <description>oracle xa datasource</description>
  65. <property name="uniqueResourceName" value="${oracle_resourceName}"/>
  66. <property name="xaDataSourceClassName" value="${oracle_xaDataSourceClassName}"/>
  67. <property name="xaProperties">
  68. <props>
  69. <prop key="user">${oracle_user}</prop>
  70. <prop key="password">${oracle_password}</prop>
  71. <prop key="URL">${oracle_url}</prop>
  72. </props>
  73. </property>
  74. <property name="minPoolSize" value="${oracle_poolSize}"/>
  75. <property name="maxPoolSize" value="${oracle_maxPoolSize}"/>
  76. <property name="maxIdleTime" value="${oracle_maxIdleTime}"/>
  77. <property name="borrowConnectionTimeout" value="${borrowConnectionTimeout}"/>
  78. </bean> -->
  79.  
  80. <bean id="dataSourceXph" parent="abstractXADataSource">
  81. <description>mysql xph datasource</description>
  82. <property name="uniqueResourceName" value="${mysql_resourceName_xph}"/>
  83. <property name="xaDataSourceClassName" value="${mysql_xaDataSourceClassName}"/>
  84. <property name="xaProperties">
  85. <props>
  86. <prop key="url">${mysql_url_xph}</prop>
  87. <prop key="user">${mysql_user_xph}</prop>
  88. <prop key="password">${mysql_password_xph}</prop>
  89. </props>
  90. </property>
  91. </bean>
  92.  
  93. <bean id="dataSourceQs" parent="abstractXADataSource">
  94. <description>mysql qs datasource</description>
  95. <property name="uniqueResourceName" value="${mysql_resourceName_qs}"/>
  96. <property name="xaDataSourceClassName" value="${mysql_xaDataSourceClassName}"/>
  97. <property name="xaProperties">
  98. <props>
  99. <prop key="url">${mysql_url_qs}</prop>
  100. <prop key="user">${mysql_user_qs}</prop>
  101. <prop key="password">${mysql_password_qs}</prop>
  102. </props>
  103. </property>
  104. </bean>
  105.  
  106. <!--Spring让LOB数据操作变得简单易行 LOB类型后期需要的话再加入-->
  107. <!-- <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/> -->
  108.  
  109. <!-- 创建SqlSessionFactory,同时指定数据源-->
  110. <!-- <bean id="sqlSessionFactoryOracle" class="org.mybatis.spring.SqlSessionFactoryBean">
  111. <property name="dataSource" ref="dataSourceOracle" />
  112. <property name="configLocation" value="classpath:com/tykj/resources/configuration.xml"/>
  113. <property name="mapperLocations" value="classpath*:com/tykj/tracingcloud/beans/**/*.xml"/>
  114. </bean> -->
  115.  
  116. <bean id="sqlSessionFactoryXph" class="org.mybatis.spring.SqlSessionFactoryBean">
  117. <property name="dataSource" ref="dataSourceXph" />
  118. <property name="configLocation" value="classpath:com/tykj/resources/configuration.xml"/>
  119. <!-- <property name="mapperLocations" value="classpath*:com/tykj/weatherservice/bean/**/*.xml"/> -->
  120. <property name="mapperLocations">
  121. <array>
  122. <value>classpath*:com/tykj/weatherservice/bean/xphdata/xphRealData.xml</value>
  123. </array>
  124. </property>
  125. </bean>
  126.  
  127. <bean id="sqlSessionFactoryQs" class="org.mybatis.spring.SqlSessionFactoryBean">
  128. <property name="dataSource" ref="dataSourceQs" />
  129. <property name="configLocation" value="classpath:com/tykj/resources/configuration.xml"/>
  130. <!-- <property name="mapperLocations" value="classpath*:com/tykj/weatherservice/bean/**/*.xml"/> -->
  131. <property name="mapperLocations">
  132. <array>
  133. <value>classpath*:com/tykj/weatherservice/bean/channel/channel.xml</value>
  134. <value>classpath*:com/tykj/weatherservice/bean/deviceinfo/deviceinfo.xml</value>
  135. <value>classpath*:com/tykj/weatherservice/bean/webthings/webthings.xml</value>
  136. </array>
  137. </property>
  138. </bean>
  139.  
  140. <!-- MyBatis为不同的mapper注入sqlSessionFactory -->
  141. <bean id="xphRealDataDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  142. <property name="sqlSessionFactory" ref="sqlSessionFactoryXph" />
  143. <property name="mapperInterface" value="com.tykj.weatherservice.dao.xphdata.XphRealDataDao" />
  144. </bean>
  145. <bean id="channelDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  146. <property name="sqlSessionFactory" ref="sqlSessionFactoryQs" />
  147. <property name="mapperInterface" value="com.tykj.weatherservice.dao.channel.ChannelDao" />
  148. </bean>
  149. <bean id="deviceinfoDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  150. <property name="sqlSessionFactory" ref="sqlSessionFactoryQs" />
  151. <property name="mapperInterface" value="com.tykj.weatherservice.dao.deviceinfo.DeviceinfoDao" />
  152. </bean>
  153. <bean id="webThingsDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  154. <property name="sqlSessionFactory" ref="sqlSessionFactoryQs" />
  155. <property name="mapperInterface" value="com.tykj.weatherservice.dao.webthings.WebThingsDao" />
  156. </bean>
  157.  
  158. <!-- Mapper接口所在包名,Spring会自动查找其下的Mapper -->
  159. <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  160. 不能跟其他bean的扫描路径重叠
  161. <property name="basePackage" value="com.tykj.tracingcloud.beans.*" />
  162. sqlSessionFactory自动注入
  163. <property name="sqlSessionFactory" ref="sqlSessionFactoryOracle"/>
  164. </bean> -->
  165. <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  166. 不能跟其他bean的扫描路径重叠
  167. <property name="basePackage" value="com.tykj.weatherservice.dao.base.implxph" />
  168. sqlSessionFactory自动注入
  169. <property name="sqlSessionFactoryBeanName" ref="sqlSessionFactoryXph"/>
  170. </bean>
  171. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  172. 不能跟其他bean的扫描路径重叠
  173. <property name="basePackage" value="com.tykj.weatherservice.dao.base.implqs" />
  174. sqlSessionFactory自动注入
  175. <property name="sqlSessionFactoryBeanName" ref="sqlSessionFactoryQs"/>
  176. </bean> -->
  177.  
  178. <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
  179. <description>UserTransactionImp1</description>
  180. <property name="transactionTimeout">
  181. <value>300</value>
  182. </property>
  183. </bean>
  184.  
  185. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
  186. init-method="init" destroy-method="close">
  187. <description>UserTransactionManager1</description>
  188. <property name="forceShutdown">
  189. <value>true</value>
  190. </property>
  191. </bean>
  192.  
  193. <!-- spring 事务管理器 -->
  194. <bean id="transactionManager"
  195. class="org.springframework.transaction.jta.JtaTransactionManager">
  196. <property name="transactionManager" ref="atomikosTransactionManager"/>
  197. <property name="userTransaction" ref="atomikosUserTransaction" />
  198. <property name="allowCustomIsolationLevels" value="true"/>
  199. </bean>
  200.  
  201. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  202. <property name="dataSource" ref="dataSourceXph"/>
  203. </bean>
  204.  
  205. <!-- 事务的传播特性(JoinPoint) -->
  206. <tx:advice id="txAdvice" transaction-manager="txManager">
  207. <tx:attributes>
  208. <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
  209. <tx:method name="modify*" propagation="REQUIRED"
  210. rollback-for="java.lang.Exception"/>
  211. <tx:method name="delete*" propagation="REQUIRED"
  212. rollback-for="java.lang.Exception"/>
  213. <tx:method name="update*" propagation="REQUIRED"
  214. rollback-for="java.lang.Exception"/>
  215. <tx:method name="deal*" propagation="REQUIRED"
  216. rollback-for="java.lang.Exception"/>
  217. <!-- SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。-->
  218. <tx:method name="*" propagation="SUPPORTS"/>
  219. </tx:attributes>
  220. </tx:advice>
  221.  
  222. <!-- 开启注解 -->
  223. <context:annotation-config />
  224. <!-- base-package指向注解要扫描的包 -->
  225. <context:component-scan base-package="com.tykj.weatherservice" annotation-config="false"/>
  226.  
  227. <!-- 配置那些类参与事务(PointCut) -->
  228. <aop:config>
  229. <aop:pointcut expression="execution(* com.tykj.weatherservice.service.*..impl.*(..))" id="serviceMethod"/>
  230. <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
  231. </aop:config>
  232. </beans>

2.项目结构

基于 Spring + Atomikos + Mybatis的多数据源配置(含有BaseDao,BaseService)的更多相关文章

  1. 基于 Spring + Atomikos + Mybatis的多数据源配置demo

    1.spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  2. spring boot +mybatis+druid 多数据源配置

    因为我的工程需要在两个数据库中操作数据,所以要配置两个数据库,我这里没有数据源没有什么主从之分,只是配合多数据源必须要指定一个主数据源,所以我就把 操作相对要对的那个数据库设置为主数据(dataBas ...

  3. spring,mybatis,多数据源配置

    spring.xml配置 <!-- 对数据源进行事务管理 --> <bean id="transactionManager" class="org.sp ...

  4. Spring Boot 2.x基础教程:MyBatis的多数据源配置

    前两天,我们已经介绍了关于JdbcTemplate的多数据源配置以及Spring Data JPA的多数据源配置,接下来具体说说使用MyBatis时候的多数据源场景该如何配置. 添加多数据源的配置 先 ...

  5. Spring Boot 2.x 多数据源配置之 MyBatis 篇

    场景假设:现有电商业务,商品和库存分别放在不同的库 配置数据库连接 app: datasource: first: driver-class-name: com.mysql.cj.jdbc.Drive ...

  6. Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动 ...

  7. 基于Spring框架的简单多数据源切换解决办法

    基于Spring框架的简单多数据源切换解决办法 Spring框架JDBC包提供了一个抽象类AbstractRoutingDataSource提供了动态切换数据库的基础方法.我们仅仅需要实现一个简单的数 ...

  8. 13、Spring Boot 2.x 多数据源配置

    1.13 Spring Boot 2.x 多数据源配置 完整源码: Spring-Boot-Demos

  9. Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置

    上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...

随机推荐

  1. 004_硬件基础电路_AD各层含义

  2. MongoDB 集合与文档操作

    一.创建DB 1.查看DB >show dbs 2.创建DB >use mydb 3.查看当前DB >db 4.删除DB >use mydb >db.dropDataba ...

  3. LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律

    二次联通门 : LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 /* LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 set ...

  4. BZOJ4406 WC2016 论战捆竹竿

    Problem BZOJ Solution 显然是一个同余系最短路问题,转移方案就是所有|S|-border的长度,有 \(O(n)\) 种,暴力跑dijkstra的复杂度为 \(O(n^2\log ...

  5. 数据结构实验之图论三:判断可达性(SDUT 2138)(简单DFS)

    #include <bits/stdc++.h> using namespace std; int gra[1002][1005]; int vis[1002]; int n,m; voi ...

  6. (转)实验文档4:kubernetes集群的监控和日志分析

    改造dubbo-demo-web项目为Tomcat启动项目 Tomcat官网 准备Tomcat的镜像底包 准备tomcat二进制包 运维主机HDSS7-200.host.com上:Tomcat8下载链 ...

  7. (4)打造简单OS-loader硬盘加载和C++写入文件

    0.简要说明: 我们完全可以使用bochs创建映像文件,如https://blog.csdn.net/jadeshu/article/details/89046838   ,那么为什么还去用C++去模 ...

  8. Mac 10.14.5系统偏好设置安全性与隐私不展示任何来源解决办法

    Mac新系统升级(10.14.5)后未从appstore下载的软件在安装时会提示安装包已损坏之类的东东,这是因为没有打开“设置”—“安全与隐私”中的“任何来源”造成的,可是升级后的10.14.5却没有 ...

  9. python学习:模块(第一节)

    1.什么是模块? 如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这 ...

  10. OF1.7中的p_rgh【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/80454-p_rgh-1-7-a.html stawrog ...