SpringBoot+Mybatis 配置多數據源

目的:

springBoot項目中添加database1數據庫和database2數據庫

第一步:修改application.properties配置文件

   1. 在application.properties文件中追加了以下內容

#mysql database1數據庫
spring.datasource.database1.url=jdbc:mysql://10.10.10.10/database1?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.database1.username=root1
spring.datasource.database1.password=123456
#mysql database2數據庫
spring.datasource.rule.url=jdbc:mysql://10.10.10.10/database2?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC
spring.datasource.database2.username=root2
spring.datasource.database2.password=123456

   2. 在application.properties文件中追加數據庫連接驅動的配置信息

確定好數據庫連接方式,並選擇對應的驅動,本項目選擇druid的連接方式:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

第二步:創建Database1SourceConfig配置文件

1. 在項目路徑下創建config文件夾;

2. 在config文件夾下,創建Database1SourceConfig文件,用於存放database1的配置文件;

3. 在Database1SourceConfig文件中,主要用於配置DataSource、配置SessionFactory內容,然後根據具體情況,選擇配置SqlSessionTemplate,和事務管理器TransactionManager;

具體database1SourceConfig內示例代碼如下:


import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.util.Properties;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


@Slf4j
@Configuration
public class Database1SourceConfig{

    @Autowired
    private Environment environment;// 配置文件

	//配置`DataSource`
    @Bean(name = "database1DataSource")
    public DataSource getBasedbDataSource() throws Exception {
        Properties props = new Properties();
        props.put("driverClassName", environment.getProperty("spring.datasource.driver-class-name"));
        props.put("url", environment.getProperty("spring.datasource.Database1.url"));
        props.put("username", environment.getProperty("spring.datasource.Database1.username"));
        props.put("password", environment.getProperty("spring.datasource.Database1.password"));
        log.info("DruidDataSource configuration" + props);
        return DruidDataSourceFactory.createDataSource(props);
    }

	//配置`SessionFactory`
    @Bean(name = "database1SessionFactory")
    //@Primary用於設置主從關係,即默認使用此配置信息
    @Primary
    public SqlSessionFactory database1SessionFactoryBean(@Qualifier("Database1DataSource") DataSource dataSource) {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);

     /*   PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("rowBoundsWithCount", "false");
        properties.setProperty("params", "count=countSql");
        properties.setProperty("offsetAsPageNum", "false");
        properties.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(properties);*/


        //添加插件
        bean.setPlugins(new Interceptor[]{});
        //添加XML目錄
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath:mapping/database1/*.xml"));
            return bean.getObject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    //創建SqlSessionTemplate 【非必須】
    @Bean(name = "database1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("database1SessionFactory") SqlSessionFactory sqlSessionFactory) throws  Exception{
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    // 創建事務管理器 【非必須】
    @Bean(name = "database1TransactionManager")
    @Primary
    public DataSourceTransactionManager secondTransactionManager(@Qualifier("database1DataSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
}

第三步:同上,在config文件夾下創建Database2SourceConfig配置文件

Database2SourceConfig代碼如下:


import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.util.Properties;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


@Slf4j
@Configuration
public class Database2SourceConfig{

    @Autowired
    private Environment environment;// 配置文件

	//配置`DataSource`
    @Bean(name = "database2DataSource")
    public DataSource getBasedbDataSource() throws Exception {
        Properties props = new Properties();
        props.put("driverClassName", environment.getProperty("spring.datasource.driver-class-name"));
        props.put("url", environment.getProperty("spring.datasource.Database2.url"));
        props.put("username", environment.getProperty("spring.datasource.Database2.username"));
        props.put("password", environment.getProperty("spring.datasource.Database2.password"));
        log.info("DruidDataSource configuration" + props);
        return DruidDataSourceFactory.createDataSource(props);
    }

	//配置`SessionFactory`
    @Bean(name = "database2SessionFactory")
    public SqlSessionFactory database2SessionFactoryBean(@Qualifier("Database2DataSource") DataSource dataSource) {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);

     /*   PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("rowBoundsWithCount", "false");
        properties.setProperty("params", "count=countSql");
        properties.setProperty("offsetAsPageNum", "false");
        properties.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(properties);*/


        //添加插件
        bean.setPlugins(new Interceptor[]{});
        //添加XML目錄
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath:mapping/database2/*.xml"));
            return bean.getObject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    //創建SqlSessionTemplate 【非必須】
    @Bean(name = "database2SqlSessionTemplate")
    public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("database2SessionFactory") SqlSessionFactory sqlSessionFactory) throws  Exception{
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    // 創建事務管理器 【非必須】
    @Bean(name = "database2TransactionManager")
    public DataSourceTransactionManager secondTransactionManager(@Qualifier("database2DataSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
}

第四步:配置DataBase*MyBatisMapperScannerConfig配置信息,用於指定dao的路徑

  • config文件下分別創建DataBase1MyBatisMapperScannerConfigDataBase2MyBatisMapperScannerConfig兩個文件,內容分別如下:
  • 下面basePackages 寫上該數據庫對應的mapper文件的路徑,該mapper文件下一層就是xml文件
@Configuration
@AutoConfigureAfter(DataBase1DataSourceConfig.class)
public class DataBase1MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer1() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataBase1lSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.zjtmeng.dao.dataBase1");
        return mapperScannerConfigurer;
    }
}
@Configuration
@AutoConfigureAfter(DataBase2DataSourceConfig.class)
public class DataBase2MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer1() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataBase2lSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.zjtmeng.dao.dataBase1");
        return mapperScannerConfigurer;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章