现在有两个数据库,(A和B),两个数据库都有一张USER表。
现在的问题是,我操作的B数据库中的USER表时,对应的A数据库中的USER表也需要被操作
假设,我在B数据库中的USER表中增加一条数据,那么在A数据库中的USER表也需要增加。当然,还要有事务控制
请问,有没有办法实现呢?我有用hibernate跟spring本身有个系统操作着A数据库了。现在开发另一个新系统,但是上头说数据库要分开,并且用户表(USER)要又要统一,
实现在新系统中注册的用户在旧系统也能登陆,旧系统注册的用户在新系统也能登陆,基本意思就是这样。
请问有没有办法可以解决?

解决方案 »

  1.   

    不知道什么数据库。
    oracle的话,建dblink,在两个user表上加trigger进行同步即可。
      

  2.   

    为什么不配置两个sessionfactory在spring里面,这样不就可以在写代码的时候使用两个sessionfactory对不同数据库操作啦。
    当要求登录时候就用旧的数据库user表,当要对新数据库表操作时候就用另一个sessionfactory进行操作
      

  3.   

    JTALZ不如换个思路,在新系统或者老系统中,暴露出一个对user表操作的web service,两套系统都调用这个web service,只操纵一张表就好了。
      

  4.   

    那就是ssh中使用多数据源配置嘛,给你一个参考:
    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》 
      

  5.   


    你的想法我也有想过,但是这样貌似控制不了事务,我在这边调用那边提供的web service操作,这边回滚,那边貌似不会,
      

  6.   

    我不大懂哈 说说我的看法 你可以在B数据库中写个触发器,在对B数据库操作之后对A执行同样的操作 不过貌似插入、更新、删除都要写
    另外context.xml中配置两个数据库不知道可不可行 没试过