spring+mybatis配置多个数据源以及使用

有时项目较大或者数据库设计的问题,一个项目需要连接多个数据源,现在用我的成功的demo写一下步骤,以两个数据源为例,更多个也是一样的。

1、多个数据库参数
       在jdbc.Properties中,配置两个数据库的连接。在此处的例子如下(我这里都是使用的MySql,如果要使用其他的请更换驱动),有些数据一样可以使用一个:

jdbc.driverClassName=com.mysql.jdbc.Driver
 
#数据库一
jdbc.url=jdbc:mysql://localhost:3306/zhangl1
jdbc.username=root
jdbc.password=root
 
#数据库二
jdbc.url.cm=jdbc:mysql://localhost:3306/zhangl2
jdbc.username.cm=root
jdbc.password.cm=root
2、配置数据源

       将两个数据表对应的实体对象和mapper文件放在不同的路径下。
       跟一个数据源配置是一样的,只是配置了两个而已,注意名字不要相同

      basePackages 指定实体类的位置,getResources指定mapper的位置

数据源1:

@Configuration
@MapperScan(basePackages = {"com.zhl.dao.main"},sqlSessionFactoryRef = "mainSqlSessionFactory")
public class MainDBConfig {

    @Resource
    @Qualifier("mainDS")
    private DataSource mainDs;

    @Bean(name = "mainSqlSessionFactory")
    public SqlSessionFactory mainSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(mainDs);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/main/*Mapper.xml"));
        return bean.getObject();
    }

    @Bean(name = "mainTransactionManager")
    @Primary
    public DataSourceTransactionManager mainTransactionManager() {
        return new DataSourceTransactionManager(mainDs);
    }

    @Bean(name = "mainSqlSessionTemplate")
    public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory")  SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }


}

数据源2:

/**
 * Created by Administrator on 2019/4/18.
 */
@Configuration
@MapperScan(basePackages = {"com.zhl.dao.cm"},sqlSessionFactoryRef = "cmSqlSessionFactory")
public class CmDBConfig {

    @Resource
    @Qualifier("cmDS")
    private DataSource cmDS;

    @Bean(name = "cmSqlSessionFactory")
    public SqlSessionFactory cmSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(cmDS);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/cm/*Mapper.xml"));
        return bean.getObject();
    }

    @Bean(name = "cmTransactionManager")
    @Primary
    public DataSourceTransactionManager cmTransactionManager() {
        return new DataSourceTransactionManager(cmDS);
    }

    @Bean(name = "cmSqlSessionTemplate")
    public SqlSessionTemplate cmSqlSessionTemplate(@Qualifier("cmSqlSessionFactory")  SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }


}
/**
 * Created by Administrator on 2019/4/18.
 * 引用配置的不同的数据库数据,创建不同的数据源
 */
@Configuration
public class DataSourceConfig {

    @Bean("mainDS")
    @ConfigurationProperties(prefix = "spring.datasource.main")
    @Primary
    public DataSource mainDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean("cmDS")
    @ConfigurationProperties(prefix = "spring.datasource.cm")
    @Primary
    public DataSource cmDataSource() {
        return DataSourceBuilder.create().build();
    }

}

其他的使用和单数据源相同。

你可能感兴趣的:(mysql数据库,编程语言)