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();
    }

}

其他的使用和單數據源相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章