`
步青龙
  • 浏览: 297696 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

spring多数据源

阅读更多

首先查看Mysql存储引擎 运行show engines

发现以下:

 

MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO

FEDERATED NO Federated MySQL storage engine

MyISAM YES Default engine as of MySQL 3.23 with great performance NO NO NO

BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO

MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO

CSV YES CSV storage engine NO NO NO

ARCHIVE YES Archive storage engine NO NO NO

InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES

除了InnoDB之外都不支持事务操作。所以要想支持跨库事务首先表是InnoDB类型的存储

 

运行mysql当前默认的存储引擎:show variables like '%storage_engine%';

显示:

 

 

storage_engine InnoDB

 

运行 具体某一个表的详细信息 show create table hc_info ;

显示:

hc_info

CREATE TABLE `hc_info` (

  `id` int(11) NOT NULL AUTO_INCREMENT,    ........省略

) ENGINE=InnoDB AUTO_INCREMENT=22872 DEFAULT CHARSET=utf8

好了,这就开始下一步操作了。

2:跨库事务只有JTA支持,EJB也是用JTA做到的跨库支持,其实Spring3.0较EJB 在跨库事务更方便。

先用JDBC方式实现:

application.xml内容:

 

<bean id="dataSource" class="com.atomikos.jdbc.SimpleDataSourceBean"> 
		<property name="uniqueResourceName"><value>dataSource</value></property> 
		<property name="xaDataSourceClassName"><value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value></property> 
		<property name="xaDataSourceProperties">
		<value>URL=jdbc:mysql://192.168.0.229:3306/huisou;user=root;password=123654</value>
		</property>
		<property name="exclusiveConnectionMode"><value>true</value></property> 
		<property name="connectionPoolSize"><value>3</value></property> 
		<property name="validatingQuery"><value>SELECT 1</value></property> 
	</bean> 
	<bean id="dataSource2" class="com.atomikos.jdbc.SimpleDataSourceBean"> 
		<property name="uniqueResourceName"><value>dataSource2</value></property> 
		<property name="xaDataSourceClassName"><value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value></property> 
		<property name="xaDataSourceProperties">
		<value>URL=jdbc:mysql://192.168.0.229:3306/huisou2;user=root;password=123654</value>
		</property>
		<property name="exclusiveConnectionMode"><value>true</value></property> 
		<property name="connectionPoolSize"><value>3</value></property> 
		<property name="validatingQuery"><value>SELECT 1</value></property> 
	</bean> 
	<!--date source 3  -->
	<bean id="dataSource3" class="com.atomikos.jdbc.SimpleDataSourceBean"> 
		<property name="uniqueResourceName"><value>dataSource3</value></property> 
		<property name="xaDataSourceClassName"><value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value></property> 
		<property name="xaDataSourceProperties">
		<value>URL=jdbc:mysql://192.168.0.229:3306/huisou2_enterprise;user=root;password=123654</value>
		</property>
		<property name="exclusiveConnectionMode"><value>true</value></property> 
		<property name="connectionPoolSize"><value>3</value></property> 
		<property name="validatingQuery"><value>SELECT 1</value></property> 
	</bean> 
	
		<!--date source 4  -->
	<bean id="dataSource4" class="com.atomikos.jdbc.SimpleDataSourceBean"> 
		<property name="uniqueResourceName"><value>dataSource4</value></property> 
		<property name="xaDataSourceClassName"><value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value></property> 
		<property name="xaDataSourceProperties">
		<value>URL=jdbc:mysql://192.168.0.229:3306/huisou2_sale;user=root;password=123654</value>
		</property>
		<property name="exclusiveConnectionMode"><value>true</value></property> 
		<property name="connectionPoolSize"><value>3</value></property> 
		<property name="validatingQuery"><value>SELECT 1</value></property> 
	</bean> 
	<!-- ============================sessionFactory============================ -->
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<!-- ========动态读取实体映射文件===== -->
			<property name="mappingLocations">
			<list>
				<value>
					classpath:/com/huisou/auxiliary/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/business/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/core/entity/*.hbm.xml
				</value>
			</list>
			</property>
		<property name="hibernateProperties">
			<value>
			hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
			hibernate.show_sql=true
			hibernate.format_sql=false
			hibernate.query.substitutions=true 1, false 0
			hibernate.jdbc.batch_size=20
			hibernate.connections.autocommit=true;
			<!--  hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
			hibernate.cache.provider_configuration_file_resource_path=/ehcache-hibernate.xml-->
			</value>
		</property>
		<property name="entityInterceptor">
			<ref local="treeInterceptor" />
		</property>
	</bean>
	<bean id="sessionFactory2"
		class="com.huisou.common.hibernate3.HibernateSessionFactory">
		<property name="dataSource">
			<ref bean="dataSource2" />
		</property>
		<!-- ========动态读取实体映射文件===== -->
			<property name="mappingLocations">
			<list>
				<value>
					classpath:/com/huisou/auxiliary/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/business/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/core/entity/*.hbm.xml
				</value>
			</list>
			</property>
		<property name="hibernateProperties">
			<value>
			hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
			hibernate.show_sql=true
			hibernate.format_sql=false
			hibernate.query.substitutions=true 1, false 0
			hibernate.jdbc.batch_size=20
			hibernate.connections.autocommit=true;
			<!--  hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
			hibernate.cache.provider_configuration_file_resource_path=/ehcache-hibernate.xml-->
			</value>
		</property>
		<property name="entityInterceptor">
			<ref local="treeInterceptor" />
		</property>
	</bean>
	 
	 
	 <bean id="sessionFactory3"
		class="com.huisou.common.hibernate3.HibernateSessionFactory">
		<property name="dataSource">
			<ref bean="dataSource3" />
		</property>
		<!-- ========动态读取实体映射文件===== -->
			<property name="mappingLocations">
			<list>
				<value>
					classpath:/com/huisou/auxiliary/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/business/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/core/entity/*.hbm.xml
				</value>
			</list>
			</property>
		<property name="hibernateProperties">
			<value>
			hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
			hibernate.show_sql=true
			hibernate.format_sql=false
			hibernate.query.substitutions=true 1, false 0
			hibernate.jdbc.batch_size=20
			hibernate.connections.autocommit=true;
			<!--  hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
			hibernate.cache.provider_configuration_file_resource_path=/ehcache-hibernate.xml-->
			</value>
		</property>
		<property name="entityInterceptor">
			<ref local="treeInterceptor" />
		</property>
	</bean>
	 
	 
	  <bean id="sessionFactory4"
		class="com.huisou.common.hibernate3.HibernateSessionFactory">
		<property name="dataSource">
			<ref bean="dataSource4" />
		</property>
		<!-- ========动态读取实体映射文件===== -->
			<property name="mappingLocations">
			<list>
				<value>
					classpath:/com/huisou/auxiliary/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/business/entity/*.hbm.xml
				</value>
				<value>
					classpath:/com/huisou/core/entity/*.hbm.xml
				</value>
			</list>
			</property>
		<property name="hibernateProperties">
			<value>
			hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
			hibernate.show_sql=true
			hibernate.format_sql=false
			hibernate.query.substitutions=true 1, false 0
			hibernate.jdbc.batch_size=20
			hibernate.connections.autocommit=true;
			<!--  hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
			hibernate.cache.provider_configuration_file_resource_path=/ehcache-hibernate.xml-->
			</value>
		</property>
		<property name="entityInterceptor">
			<ref local="treeInterceptor" />
		</property>
	</bean>
	<!-- ==============================声明式事务======================================= -->
	<!--JDBC事务管理器,根据你的情况使用不同的事务管理器,如果工程中有Hibernate,就用Hibernate的事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 哈哈 -->
	<bean id="transactionManager2"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory2" />
	</bean>
	
	
	<bean id="transactionManager3"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory3" />
	</bean>
	
	<bean id="transactionManager4"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory4" />
	</bean>
	
	<!-- start 实现分布式事务(跨库事务同步) -->
	<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>300</value></property>
	</bean>
	<!-- jta -->
	<bean id="hibernateTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager">
		<ref local="atomikosTransactionManager"/>
		</property>
		<property name="userTransaction">
		<ref local="atomikosUserTransaction"/>
		</property>
	</bean>
	<bean id="hibernateTransactionManager2" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager2">
		<ref local="atomikosTransactionManager"/>
		</property>
		<property name="userTransaction">
		<ref local="atomikosUserTransaction"/>
		</property>
	</bean>
	<bean id="hibernateTransactionManager3" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager3">
		<ref local="atomikosTransactionManager"/>
		</property>
		<property name="userTransaction">
		<ref local="atomikosUserTransaction"/>
		</property>
	</bean>
	<bean id="hibernateTransactionManager4" class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager4">
		<ref local="atomikosTransactionManager"/>
		</property>
		<property name="userTransaction">
		<ref local="atomikosUserTransaction"/>
		</property>
	</bean>
	<!-- end 实现分布式事务(跨库事务同步)jta -->
	<!-- 注解多事务管理 -->
	<tx:annotation-driven transaction-manager="transactionManager" />
	<tx:annotation-driven transaction-manager="transactionManager2" />
	<tx:annotation-driven transaction-manager="transactionManager3" />
	<tx:annotation-driven transaction-manager="transactionManager4" />
	
	
	<bean id="treeInterceptor"
		class="com.huisou.common.hibernate3.TreeIntercptor" />
	<context:component-scan base-package="com.huisou" />
	
 
		
 

测试代码:

 

Connection conection  = null;
		WebApplicationContext webApplicationContext = org.springframework.web.context.support.WebApplicationContextUtils
		.getRequiredWebApplicationContext(ServletActionContext.getRequest().getSession().getServletContext());
		DataSource dataSource = (DataSource)webApplicationContext.getBean("dataSource2");
		System.out.println("test");
		//SpObserver.putSp("dataSource");
		try {
		 conection = dataSource.getConnection();
		 ResultSet rs = (ResultSet)conection.prepareStatement("select id ,subject from hc_info").executeQuery();
		  while(rs.next()){     
              System.out.println("数据库2  " + rs.getInt(1)+ "\t");     
              System.out.println("数据库2  " + rs.getString(2)+ "\t");     
          }     
		  dataSource = (DataSource)webApplicationContext.getBean("dataSource");
		 conection = dataSource.getConnection();
		 rs = (ResultSet)conection.prepareStatement("select id ,subject from hc_info limit 20").executeQuery();
		  while(rs.next()){     
             System.out.println("数据库1  " + rs.getInt(1)+ "\t");     
             System.out.println("数据库1  " + rs.getString(2)+ "\t");     
         }     
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 

 

下面是JOTM在Spring中的配置
分享到:
评论

相关推荐

    Spring多数据源分布式事务管理

    在大型分布式系统中,往往需要处理多个数据源,这就涉及到了Spring多数据源的配置和管理。同时,为了保证数据的一致性,分布式事务的管理也是必不可少的。在这个场景下,Atomikos作为一款开源的JTA(Java ...

    Spring多数据源配置

    Spring多数据源配置,支持mysql、oracle等多个数据源同时存在的情况

    java spring 多数据源

    在Java Spring框架中,多数据源的实现是一个重要的特性,特别是在大型企业级应用中,它允许应用程序连接到多个数据库,从而实现数据隔离、负载均衡或读写分离等高级功能。本教程将深入探讨如何在Spring中配置和管理...

    mybatis spring 多数据源

    标题 "mybatis spring 多数据源" 涉及到的是在Java开发中,如何使用MyBatis和Spring框架来管理多个数据库连接。这通常在需要处理来自不同数据源的数据或者实现数据库读写分离的场景下应用。MyBatis是一个优秀的持久...

    基于Spring多数据源实例

    本文将深入探讨如何在一个基于Spring框架的应用中实现多数据源的动态切换,以"基于SSI+Oracle架构的多数据源动态切换实例"为例进行详细讲解。 首先,我们需要理解什么是多数据源。多数据源是指在一个应用中同时连接...

    Spring多数据源解决方案

    Spring多数据源解决方案是针对大型应用中数据分片和分布式数据库管理的需求而设计的一种策略。在这样的场景下,为了提高系统的可扩展性和性能,数据通常会被分散到多个数据库实例上。这种架构如图1所示,每个数据库...

    spring多数据源动态切换方案

    在企业级应用开发中,Spring框架的广泛使用使得数据源管理变得尤为重要,特别是在处理多数据库环境时。"Spring多数据源动态切换方案"是解决这一问题的关键技术,它允许应用程序根据业务需求动态选择数据源,提高了...

    spring多数据源.rar

    本资源"spring多数据源.rar"聚焦于Spring框架如何处理多个不同的数据源,这对于需要连接到多个数据库的应用程序至关重要。下面将详细介绍Spring多数据源的配置和使用。 首先,我们需要理解“多数据源”这一概念。在...

    spring多数据源的处理_mybatis实现跨库查询

    "Spring 多数据源处理_Mybatis 实现跨库查询" 本文主要讨论了 Spring 框架中多数据源的处理方法,特别是使用 Mybatis 实现跨库查询。在大型应用中,为了提高系统的水平伸缩性,需要对数据进行切分,并且采用多个...

    Spring多数据源atomikos所有jar包

    接下来,描述中提到的"Spring多数据源atomikos所有jar包.pdf"很可能是包含详细的步骤和配置示例的文档,这份文档可能涵盖了如何在Spring项目中添加和配置Atomikos的jar包,以及如何进行多数据源的设置。通常,我们...

    基于注解的Spring多数据源配置和使用

    ### 基于注解的Spring多数据源配置与使用详解 #### 一、引言 在企业级应用开发中,经常会遇到需要从多个数据库拉取数据的情况,比如进行跨库查询、定时任务中的数据分析及报表统计等。Spring框架作为Java开发领域的...

    Spring多数据源配置_分布式数据

    ### Spring多数据源配置与分布式数据管理 #### 环境及框架介绍 在本案例中,我们将探讨如何在基于Tomcat服务器的环境下配置多个数据源,并实现分布式数据的交互。该系统的架构主要包括:Tomcat作为应用服务器,...

    spring多数据源 创建 切换使用

    总结,Spring多数据源的创建和切换主要涉及数据源的配置、动态数据源路由以及业务中的数据源切换操作。通过这种方式,我们可以灵活地在不同数据源之间进行切换,满足复杂业务场景的需求。在实际项目中,要注意线程...

    spring多数据源的实现

    在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,而随着业务复杂性的增加,往往需要处理来自多个数据源的数据。"Spring多数据源的实现"是一个关键的...

    Spring配置多个数据源

    Spring框架提供了一种灵活的方式来配置和管理多个数据源,使得这种需求变得简单易行。本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储...

    spring 动态多数据源配置代码

    下面将详细介绍Spring动态多数据源配置的相关知识点。 1. **为什么要使用多数据源**: 在实际项目中,可能需要连接到不同的数据库,例如,一个用于存储主业务数据,另一个用于日志记录或数据分析。通过多数据源...

Global site tag (gtag.js) - Google Analytics