springboot整合mybatis多數據源

application.properties


#mysql
[email protected]@
spring.datasource.primary.username= @db.primarUsername@
spring.datasource.primary.password= @db.primaryPassword@
spring.datasource.primary.driverClassName= @db.primaryDriverClassName@

#sqlserver
[email protected]@
[email protected]@
[email protected]@
spring.datasource.secondary.driverClassName=@db.secondDriverClassName@

第一個數據源的配置

package com.eyee.distribution.config;

import com.zaxxer.hikari.HikariDataSource;
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.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


import javax.sql.DataSource;

/**
 * mysql數據源
 *auth
 */
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.mysql"},sqlSessionFactoryRef ="primarySqlSessionFactory",sqlSessionTemplateRef ="primarySqlSessionTemplate")
public class PrimaryDataSourceConfig {

    /**
     * 讀取peropertie注入第一個數據源,注意這裏如果不設置primary會報錯
     * @return
     */

    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource CreatePrimaryDataSource()   {
     //指定使用hikari連接池
        return   DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    /**
     * 將第一個數據源注入工廠
     * @param dataSource
     * @return
     * @throws Exception
     */

    @Bean(name="primarySqlSessionFactory")
    public SqlSessionFactory primarySqlSessionFactory( @Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        //設置數據源
        sqlSessionFactoryBean.setDataSource(dataSource);
        //掃描xml的路徑地址
       // sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mybatis/mysql/*Mapper.xml"));
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));//分頁
        return sqlSessionFactoryBean.getObject();
    }
    /**
     * 配置事務管理器
     */

    @Bean
    public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 查詢使用的模板類注意這裏一定要獨立分開各自的模板類
     * @param sqlSessionFactory
     * @return
     * @throws Exception
     */

    @Bean("primarySqlSessionTemplate")
    public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
        return template;
    }
}

第二個數據源

package com.eyee.distribution.config;

import com.zaxxer.hikari.HikariDataSource;
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.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * sqlserver數據源
 */
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.sqlserver"},sqlSessionFactoryRef ="secondarySqlSessionFactory",sqlSessionTemplateRef ="secondarySqlSessionTemplate" )
public class SencondarDatasourceConfig {
    @Primary
    @Bean(name = "scondaryDataSource")
    @Qualifier("scondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource CreateSecondaryDataSource()   {

        return   DataSourceBuilder.create().type(HikariDataSource.class).build();
    }
    @Primary
    @Bean(name="secondarySqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*/mybatis/sqlserver/*"));
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));
        return sqlSessionFactoryBean.getObject();
    }
    /**
     * 配置事務管理器
     */
    @Primary
    @Bean
    public DataSourceTransactionManager transactionManager(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
        return new DataSourceTransactionManager(dataSource);
    }
    @Primary
    @Bean("secondarySqlSessionTemplate")
    public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
        return template;
    }
}

 

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