本帖最后由 JAVA_STU 于 2010-01-08 15:36:20 编辑

解决方案 »

  1.   

    多个dataSource,多个sessionFaction。
      

  2.   

    给你一个我们用的: context.xml 《?xml version="1.0" encoding="UTF-8"?》 《beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/jee                    http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"》 《jee:jndi-lookup id="mysqlds" jndi-name="java:comp/env/jdbc/mysqlds" /》 《jee:jndi-lookup id="orads" jndi-name="java:comp/env/jdbc/orads" /》 《bean id="dataSource" class="util.DynamicDataSource"》 《property name="targetDataSources"》 《map key-type="java.lang.String"》 《entry key="0" value-ref="mysqlds" /》 《entry key="1" value-ref="orads" /》 《/map》 《/property》 《property name="defaultTargetDataSource" ref="orads" /》 《/bean》 《/beans》 package util; public class DbContextHolder { private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setDbType(String dbType) { contextHolder.set(dbType); } public static String getDbType() { return (String) contextHolder.get(); } public static void clearDbType() { contextHolder.remove(); } } package util; import java.sql.SQLException; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource {  //static Logger log = Logger.getLogger("DynamicDataSource");  @Override  protected Object determineCurrentLookupKey() {  // TODO return DbContextHolder.getDbType();  } @Override public boolean isWrapperFor(Class 《?》 iface) throws SQLException { // TODO Auto-generated method stub return false; } @Override public 《T》 T unwrap(Class 《T》 iface) throws SQLException { // TODO Auto-generated method stub return null; } } 测试程序: DbContextHolder.setDbType("1");            UserDomain od = this.testService.queryUserAccount("admin");           System.out.println("username=="+od.getName());                               DbContextHolder.setDbType("0"); d = this.testService.queryUserAccount("admin");《bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"》         《!-- Connection Info --》         《property name="driverClassName" value="${jdbc.driver}" /》         《property name="url" value="${jdbc.url}" /》         《property name="username" value="${jdbc.username}" /》         《property name="password" value="${jdbc.password}" /》         《!-- Connection Pooling Info --》         《property name="initialSize" value="5" /》         《property name="maxActive" value="100" /》         《property name="maxIdle" value="30" /》         《property name="maxWait" value="1000" /》         《property name="poolPreparedStatements" value="false" /》         《property name="defaultAutoCommit" value="false" /》         《/bean》 《bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"》         《!-- Connection Info --》         《property name="driverClassName" value="${jdbc.driver}" /》         《property name="url" value="${jdbc.url}" /》         《property name="username" value="${jdbc.username}" /》         《property name="password" value="${jdbc.password}" /》         《!-- Connection Pooling Info --》         《property name="initialSize" value="5" /》         《property name="maxActive" value="100" /》         《property name="maxIdle" value="30" /》         《property name="maxWait" value="1000" /》         《property name="poolPreparedStatements" value="false" /》         《property name="defaultAutoCommit" value="false" /》         《/bean》 《bean id="dataSource" class="util.DynamicDataSource"》 《property name="targetDataSources"》 《map key-type="java.lang.String"》 《entry key="0" value-ref="dataSource1" /》 《entry key="1" value-ref="dataSource2" /》 《/map》 《/property》 《property name="defaultTargetDataSource" ref="dataSource1" /》 《/bean》 《/beans》 
      

  3.   

    就是ssh动态支持多数据源啊。看不懂?
      

  4.   

    我记得应该都是<>符号来着,你怎么是《》呢?
      

  5.   

    使用多个数据库不是难点,难点在于如何管理多个数据库之间的事务!如果三个数据库不涉及同一个事务那是没有问题的,如果一个操作涉及一个事务,那称之为分布式事务(分布式事务通俗点讲就是:一个操作需要在 A 上存些东西,在 B 上修改一些东西,在 C 上删除一些记录,这三个操作要么全部成功,要么全部失败)。JDBC 的事务是基于 Connection 的,因此 JDBC 无法支持分布式事务。虽然 SSH 很强大,但是针对于分布式事务来说,要使用 SSH 的话,必须放到 J2EE 应用服务器中,而且数据源必须配置在 JNDI 上,并且使用 JTA 的分布式事务处理。另外,在数据库服务端必须支持分布式事务,SQL Server 是企业级数据库是支持的;MySQL 需要 5.0 以上版本,JDBC 也需要 5.0 以上版本,而且需要使用 InnoDB 数据引擎;Access 的话也就算了,绝对不可能支持分布式事务的。
      

  6.   

    如果不想在 J2EE 应用服务器上使用的话,可以去看一下 jOTM 这个开源框架,这个框架在 J2SE 环境中实现了分布式事务和 JTA
      

  7.   

    有个 linked 方法  你可以查下资料可以实现使用多个数据库  你可以试下