我现在在做的这套系统要求所有的数据都分离一份出来,但程序只用一套。就是在tomcat下面只发布一个应用。我是想这样设计, 在登陆的时候提供一个选择帐套的功能,选择不同的帐套后台连接不同的数据库。我们框架是用的struts2+ibatis+spring,这样子spring要怎样去根据用户选择,从而选择性的加载不同的jdbc.properties文件。
做过这样的例子的高手能提供一下思路吗?先谢谢大家了。 

解决方案 »

  1.   

    加载同一个properties文件,但在里面定义2个数据源。贴段:
    #数据源1
    jdbc.user=
    jdbc.password=
    jdbc.jdbcUrl=
    jdbc.poolmin=
    jdbc.poolinit=
    #数据源2
    um.jdbc.user=
    um.jdbc.password=
    #um.jdbc.jdbcUrl=
    um.jdbc.jdbcUrl=
    um.jdbc.driverClass=
    um.jdbc.poolmax=
    um.jdbc.poolmin=
    um.jdbc.poolinit=
      

  2.   


    那我怎样去拿到不同的connection?  
      

  3.   

    <!-- 定义数据源dataSource -->   
        <bean id="dataSource"  
            class="org.apache.commons.dbcp.BasicDataSource">   
            <property name="driverClassName"  
                value="ianywhere.ml.jdbcodbc.jdbc3.IDriver">   
            </property>   
            <property name="url"  
                value="jdbc:odbc:driver=SQL Anywhere 11;eng=zyx;links=tcpip{host=10.144.99.46;port=2998};">   
           </property>   
            <property name="username" value="zyx"></property>   
            <property name="password" value="zyx"></property>   
           <property name="initialSize" value="1"></property>   
            <property name="maxActive" value="500"></property>   
            <property name="maxIdle" value="5"></property>   
            <property name="minIdle" value="1"></property>   
        </bean>   
      
        <!-- 定义数据源Oracle -->   
        <bean id="dataSourceOracle"  class="org.apache.commons.dbcp.BasicDataSource">   
            <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>   
           <property name="url" value="jdbc:oracle:thin:@10.144.99.114:1521/sanexcfg"></property>   
           <property name="username" value="sanex"></property>   
            <property name="password" value="sanex"></property>   
           <property name="initialSize" value="1"></property>   
            <property name="maxActive" value="500"></property>   
            <property name="maxIdle" value="5"></property>   
           <property name="minIdle" value="1"></property>   
        </bean>   
     
        <!-- 定义数据源sqlserver dataSource -->   
        <bean id="dataSourceSqlServer"  
            class="org.apache.commons.dbcp.BasicDataSource">   
      
            <property name="driverClassName"  
                value="com.microsoft.jdbc.sqlserver.SQLServerDriver">   
            </property>   
           <property name="url"  
               value="jdbc:microsoft:sqlserver://10.71.158.50:1433;DatabaseName=Mon;">   
           </property>   
            <property name="username" value="sa"></property>   
           <property name="password" value="sa"></property>   
      
           <property name="initialSize" value="1"></property>   
            <property name="maxActive" value="500"></property>   
            <property name="maxIdle" value="5"></property>   
            <property name="minIdle" value="1"></property>   
        </bean>   
        <!-- 配置 ibatis 的sqlMapClient -->   
       <bean id="sqlMapClient"  
            class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">   
            <property name="configLocation"  
                value="/WEB-INF/sqlMapConfig.xml" />   
            <property name="dataSource" ref="dataSource" />          
        </bean>   
        <bean id="sqlMapClientOrac"  
            class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">   
            <property name="configLocation"  
                value="/WEB-INF/sqlMapConfig.xml" />   
           <property name="dataSource" ref="dataSourceOracle" />        
       </bean>  
    使用:
    @Resource(name = "sqlMapClient")   
        private SqlMapClient sqlMapClient;   
          
       @Resource(name = "sqlMapClientOrac")   
        private SqlMapClient sqlMapClientOrac;   
      
       public void executeSp(Map map) throws Exception{               
            sqlMapClient.queryForList("userpercept.userAnalyse.addUsefulProcedure", map);   
        }   
     
        public List<Cell> getCellList() throws Exception{   
            return sqlMapClientOrac.queryForList("userpercept.userAnalyse.getCellList");   
        }   
           
        public PlaceCell getCell(Long id) throws Exception {   
            PlaceCell cell = (PlaceCell) sqlMapClient   
                .queryForObject("userpercept.userAnalyse.selectCell",id);   
            return cell;   
        }