现在做的项目刚开始我用的是Struts2+Spring+Hibernate3.1主要框架,简单的DAO层(数据的增删改查分页等)数据源也有Spring控制管理,事务控制在Service层(具体业务方法),之前就是本地一个Sql Server 2005 数据库,现在数据要多地分开(eg:北京、上海、厦门),比如公司总部在北京,分公司在上海和厦门,三个公司的业务侧重点都不同,而且每天分公司还必须把数据资料汇到总公司(数据资料定时转移),那我就三个地方各有一个数据库,那数据库名可以不一样吗?具体业务表结果和数目可以不一样吗?Web服务器是Tomcat5.5,那我是三个地方共用一个Tomcat(就一个应用程序)还是要三地都有一个同样的Tomcat(那样的话我不还得有同样的代码都拿走了,这个不行),还有就是Spring的配置文件applicationContext.xml又得怎么配了,跟以前的应当不一样了,那些事务管理又该怎么办?比如在一个方法里先访问北京数据库,接着又要访问上海的数据库,事务怎么控制的?这些是我一个人来做,没其他人帮指导,在网上也搜了一些,但是都没有理想的回复,还希望各位能人智士帮忙出出点子及具体策略,非常感谢。

解决方案 »

  1.   

    多数据库的事务控制要自己实现框架了,(根据事务的原理)
    hibernate对多数据库支持不好的哦.
    你只要定义多个数据源了哦spring也只能定义多个Context了哦
      

  2.   

    1.不知道楼主为什么要这么做,如果是一个应用的话就用一个应用一个数据库就行了,无论公司有多少个分公司,无论分公司在哪里都没什么问题。
    2.如果每个分公司都有不同的应用系统,就是三个不同的系统要数据交互,那最后是做接口来解决,这样比较安全
    3.如果是要配置多个数据源让spring来管理也是可以的
    不清楚楼主到底是什么情况,到底要做什么...
      

  3.   

    一个应用,我的例子里比如上海和厦门是公司的两个不同部门,他们自己的业务数据非常多,房子北京总部肯定不好吧,那读取数据是不卡死才怪,因此各地一个数据库服务器,我准备把应用程序用一个,只是在具体的方法里才去不同数据库读写数据,批量移动数据这个我可以用其他方式解决,就是不知怎么解决操作DB1后接着操作DB2等。
      

  4.   

    我现在是设计到那个主要业务的部门各一张表,每张表的结构是相同的,主要是数据量非常大,都在一张表里到时跑不了,另外由于是异地,各部门的工作是相互独立的,如果是一张表,万一哪里done了,那其他部门都不能工作了,这肯定不行。
      

  5.   

    <bean id="dataSource1"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClass}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.user}" />
            <property name="password" value="${jdbc.password}" />
        </bean>
        
        <bean id="dataSource2"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${server.jdbc.driverClass}" />
            <property name="url" value="${server.jdbc.url}" />
            <property name="username" value="${server.jdbc.user}" />
            <property name="password" value="${server.jdbc.password}" />
        </bean>
            <bean id="XXXX1DAO" class="com.XXXX.XXXX.db.XXXXDAO">
            <property name="dataSource">
                <ref local="dataSource1" />
            </property>
            <property name="sqlMapClient">
                <ref local="sqlMapClient" />
            </property>
        </bean>
            <bean id="XXXX2DAO" class="com.XXXX.XXXX.db.XXXX2DAO">
            <property name="dataSource">
                <ref local="dataSource2" />
            </property>
            <property name="sqlMapClient">
                <ref local="sqlMapClient" />
            </property>
        </bean>配置两个dataSource. 
      

  6.   

    那比如说公共查询模块,在上海的要查询一笔或N笔资料时是在北京总部的数据库去查,比如工作流程是资料有北京把资料发给上海,上海处理后交给厦门的部门处理(这时上海资料表delete,厦门资料表insert,北京资料表同步一下),厦门的处理后再交给其他地方的部门处理或直接归档(同理),那在上海的员工要查询他之前处理的资料(上海资料表已经没有那笔资料了,跑到厦门去了,同时北京总部还有)或者是他根据相关条件差一笔资料(不知是不是在上海),他该去哪里查资料,因为是异地,带宽有限,不然就直接放一个地方一个数据库里最省事。可惜上面要求把分开。EJB没弄过,不会,对SSH也只是一点皮毛,目前凑合着用。
      

  7.   

    spring支持配置多个数据源的,只是你的应用中要增加一个字段,标识要访问哪个数据库,可以编码:01对应北京,02对应上海,03对应厦门,然后编码对应各自的数据源
      

  8.   

    JPA没用过,对我之前的那些改动很大吗?