- 浏览: 299058 次
- 性别:
- 来自: 杭州
博客专栏
-
Java面试
浏览量:0
文章分类
- 全部博客 (133)
- Struts2 (4)
- Hibernate (2)
- Spring (3)
- Java常识小积累 (18)
- Linux (6)
- Oscache (1)
- 面试技巧 (2)
- Eclipse (4)
- JavaScript (21)
- 生活 (7)
- Mysql (3)
- 网络优秀文章 (1)
- Freemaker (1)
- Tcp和UDP (1)
- ubuntu -java (1)
- Oracle (14)
- 重构 (1)
- webservice (4)
- Lucene (1)
- UML与OOA/D (1)
- 软件杂谈 (2)
- Nosql(Redis) (1)
- 团队开发 (1)
- Oracle 设计 (1)
- velocity (1)
- 面试那些事儿 (1)
- 技术 (1)
- 互联网 (1)
- 数据库 (1)
- jquery (1)
- java (2)
- fastjson (1)
- Remoting (1)
- 算法 (1)
- 学习技巧 (1)
- POI (3)
- FusionCharts (1)
- 学习资源 (1)
- 设计模式 (2)
- CSS (1)
- 技术边缘 (3)
- 生活感想 (0)
- JVM (1)
- JSON (0)
- 前端 (1)
- cxf (1)
- 分布式 (1)
- 阿萨德飞 (0)
- Java面试中的知识 (2)
- redis (1)
- 开发工具使用 (3)
最新评论
-
liushimiao0104:
请问下怎么删除word里面的图片呢
POI向word添加图片,表格 -
chpn:
addBatch确实可以1.这个和复合索引没得毛关系2.in查 ...
mysql 超1亿数据,优化分页查询 -
步青龙:
dagf113225 写道请问,这个mysql执行SQL的花费 ...
mysql 超1亿数据,优化分页查询 -
dagf113225:
请问,这个mysql执行SQL的花费的时间的工具叫什么?谢谢! ...
mysql 超1亿数据,优化分页查询 -
步青龙:
white_crucifix 写道我怎么觉得builder模式 ...
Builder设计模式
首先查看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(); }
相关推荐
在大型分布式系统中,往往需要处理多个数据源,这就涉及到了Spring多数据源的配置和管理。同时,为了保证数据的一致性,分布式事务的管理也是必不可少的。在这个场景下,Atomikos作为一款开源的JTA(Java ...
Spring多数据源配置,支持mysql、oracle等多个数据源同时存在的情况
在Java Spring框架中,多数据源的实现是一个重要的特性,特别是在大型企业级应用中,它允许应用程序连接到多个数据库,从而实现数据隔离、负载均衡或读写分离等高级功能。本教程将深入探讨如何在Spring中配置和管理...
标题 "mybatis spring 多数据源" 涉及到的是在Java开发中,如何使用MyBatis和Spring框架来管理多个数据库连接。这通常在需要处理来自不同数据源的数据或者实现数据库读写分离的场景下应用。MyBatis是一个优秀的持久...
本文将深入探讨如何在一个基于Spring框架的应用中实现多数据源的动态切换,以"基于SSI+Oracle架构的多数据源动态切换实例"为例进行详细讲解。 首先,我们需要理解什么是多数据源。多数据源是指在一个应用中同时连接...
Spring多数据源解决方案是针对大型应用中数据分片和分布式数据库管理的需求而设计的一种策略。在这样的场景下,为了提高系统的可扩展性和性能,数据通常会被分散到多个数据库实例上。这种架构如图1所示,每个数据库...
在企业级应用开发中,Spring框架的广泛使用使得数据源管理变得尤为重要,特别是在处理多数据库环境时。"Spring多数据源动态切换方案"是解决这一问题的关键技术,它允许应用程序根据业务需求动态选择数据源,提高了...
本资源"spring多数据源.rar"聚焦于Spring框架如何处理多个不同的数据源,这对于需要连接到多个数据库的应用程序至关重要。下面将详细介绍Spring多数据源的配置和使用。 首先,我们需要理解“多数据源”这一概念。在...
"Spring 多数据源处理_Mybatis 实现跨库查询" 本文主要讨论了 Spring 框架中多数据源的处理方法,特别是使用 Mybatis 实现跨库查询。在大型应用中,为了提高系统的水平伸缩性,需要对数据进行切分,并且采用多个...
接下来,描述中提到的"Spring多数据源atomikos所有jar包.pdf"很可能是包含详细的步骤和配置示例的文档,这份文档可能涵盖了如何在Spring项目中添加和配置Atomikos的jar包,以及如何进行多数据源的设置。通常,我们...
### 基于注解的Spring多数据源配置与使用详解 #### 一、引言 在企业级应用开发中,经常会遇到需要从多个数据库拉取数据的情况,比如进行跨库查询、定时任务中的数据分析及报表统计等。Spring框架作为Java开发领域的...
### Spring多数据源配置与分布式数据管理 #### 环境及框架介绍 在本案例中,我们将探讨如何在基于Tomcat服务器的环境下配置多个数据源,并实现分布式数据的交互。该系统的架构主要包括:Tomcat作为应用服务器,...
总结,Spring多数据源的创建和切换主要涉及数据源的配置、动态数据源路由以及业务中的数据源切换操作。通过这种方式,我们可以灵活地在不同数据源之间进行切换,满足复杂业务场景的需求。在实际项目中,要注意线程...
在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,而随着业务复杂性的增加,往往需要处理来自多个数据源的数据。"Spring多数据源的实现"是一个关键的...
Spring框架提供了一种灵活的方式来配置和管理多个数据源,使得这种需求变得简单易行。本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储...
下面将详细介绍Spring动态多数据源配置的相关知识点。 1. **为什么要使用多数据源**: 在实际项目中,可能需要连接到不同的数据库,例如,一个用于存储主业务数据,另一个用于日志记录或数据分析。通过多数据源...