现在有两个数据库,(A和B),两个数据库都有一张USER表。
现在的问题是,我操作的B数据库中的USER表时,对应的A数据库中的USER表也需要被操作
假设,我在B数据库中的USER表中增加一条数据,那么在A数据库中的USER表也需要增加。当然,还要有事务控制
请问,有没有办法实现呢?我有用hibernate跟spring本身有个系统操作着A数据库了。现在开发另一个新系统,但是上头说数据库要分开,并且用户表(USER)要又要统一,
实现在新系统中注册的用户在旧系统也能登陆,旧系统注册的用户在新系统也能登陆,基本意思就是这样。
请问有没有办法可以解决?
现在的问题是,我操作的B数据库中的USER表时,对应的A数据库中的USER表也需要被操作
假设,我在B数据库中的USER表中增加一条数据,那么在A数据库中的USER表也需要增加。当然,还要有事务控制
请问,有没有办法实现呢?我有用hibernate跟spring本身有个系统操作着A数据库了。现在开发另一个新系统,但是上头说数据库要分开,并且用户表(USER)要又要统一,
实现在新系统中注册的用户在旧系统也能登陆,旧系统注册的用户在新系统也能登陆,基本意思就是这样。
请问有没有办法可以解决?
oracle的话,建dblink,在两个user表上加trigger进行同步即可。
当要求登录时候就用旧的数据库user表,当要对新数据库表操作时候就用另一个sessionfactory进行操作
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》
你的想法我也有想过,但是这样貌似控制不了事务,我在这边调用那边提供的web service操作,这边回滚,那边貌似不会,
另外context.xml中配置两个数据库不知道可不可行 没试过