基于Spring3MVC模式的项目框架,配置动态数据源步骤如下:

一、新建数据源常量类

   此类中的常量是通过spring-db.xml映射对应的,我这里配置了两个数据源,代码如下:

package com.baofoo.admin.service.sys.data;
/**
 * 数据源的名称常量
 * @author zhour
 *
 */
public class DynamicDataSourceGlobal {
    public static final String DATA_SOURCE_204 = "DATA_SOURCE_204";
    public static final String DATA_SOURCE_108 = "DATA_SOURCE_108";
}


二、配置spring-db.xml

   这个spring链接数据库的配置文件,需要配置的代码如下:

    
        
    
                                                                                                                  
    
    
    
        
        
        
    
    
    
        
        
        
    
                                                                                                                  
    
    
        
            
                
                
            
        
    
    
        
    


三、动态数据源设置

   这个类是用来切换数据源,再获取jdbcTemplate的管理类,代码如下:

package com.baofoo.admin.service.sys.data;
import org.springframework.util.Assert;
/**
 * 动态数据源设置
 * @author zhour
 *
 */
public class DynamicDataSourceHolder {
    /**
     * 本地环境线程
     */
    private static final ThreadLocal contextHolder = new ThreadLocal();
                                                                            
    /**
     * 设置数据源类型
     * @param dataSourceType
     */
    public static void setDataSourceType(String dataSourceType) {
        Assert.notNull(dataSourceType, "数据源不能为空...");
        contextHolder.set(dataSourceType);
    }
                                                                            
    /**
     * 获取数据源类型
     * @return
     */
    public static String getDataSourceType() {
        return (String) contextHolder.get();
    }
                                                                            
    /**
     * 清除数据源类型
     */
    public static void clearDataSourceType() {
        contextHolder.remove();
    }
}


四、测试动态数据源

   我这里是用的Junit4做的单元测试,代码如下:

package com.baofoo.admin.test.dynamicData;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;
import com.baofoo.admin.service.sys.data.DynamicDataSource;
import com.baofoo.admin.service.sys.data.DynamicDataSourceGlobal;
import com.baofoo.admin.service.sys.data.DynamicDataSourceHolder;
/**
 * 测试动态数据源
 * @author zhour
 *
 */
@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(locations = {"classpath*:app-context.xml"})
public class TestDynamicData extends AbstractJUnit4SpringContextTests {
    @Autowired
    private JdbcTemplate jdbcTemplateDynamic;
                                 
    @Test
    public void testDynamicData() {
        String sql = "SELECT * FROM BAOFOO_ADMIN.admin_login_user ORDER BY user_id DESC LIMIT 1";
        //数据源204
        DynamicDataSourceHolder.setDataSourceType(DynamicDataSourceGlobal.DATA_SOURCE_204);
        System.out.println("------------>切换数据源到204");
        //
        List> retList2 = jdbcTemplateDynamic.queryForList(sql);
        for(Map entityMap : retList2) {
            System.out.println("-------查询结果:"+entityMap);
        }
                                     
        //数据源108
        DynamicDataSourceHolder.setDataSourceType(DynamicDataSourceGlobal.DATA_SOURCE_108);
        System.out.println("------------>切换数据源到108");
        //
        List> retList1 = jdbcTemplateDynamic.queryForList(sql);
        for(Map entityMap : retList1) {
            System.out.println("-------查询结果:"+entityMap);
        }
    }
}

总结:这种切换比较规范和简单,麻烦的是必须先配置多个数据源,以前是参考网上资料,自己修改的,如有问题请指出。