springBoot多數據源

  1. 配置數據源1

 

package cn.com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;



@Configuration
@PropertySource({
        "classpath:jdbc.properties"
})
@MapperScan(basePackages = "cn.com.demo.dao.yun.*.mapper", sqlSessionTemplateRef = "yunSqlSessionTemplate")
public class DataSourceConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.driver}")
    private String driverClass;

    @Bean(name = "yunDataSource")
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setUrl(url);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClass);
        return dataSource;
    }

    /*
   * 分頁插件,自動識別數據庫類型
   * 多租戶,請參考官網【插件擴展】
   */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    @Bean(name = "yunMybatisSqlSessionFactoryBean")
    public MybatisSqlSessionFactoryBean yunSqlSessionFactoryBean(@Qualifier("yunDataSource") DruidDataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        mybatisSqlSessionFactoryBean.setDataSource(dataSource);
        mybatisSqlSessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/cn/com/demo/dao/*/*/mapper/*/*Mapper.xml"));

//        List<Interceptor> interceptors = new ArrayList<>();
        Interceptor[] interceptorsArr = new Interceptor[1];
        interceptorsArr[0] = paginationInterceptor();
//        interceptors.add(paginationInterceptor());
        mybatisSqlSessionFactoryBean.setPlugins(interceptorsArr);

        return mybatisSqlSessionFactoryBean;
    }



    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("yunDataSource") DruidDataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "yunSqlSessionTemplate")
    public SqlSessionTemplate yunSqlSessionTemplate(
            @Qualifier("yunMybatisSqlSessionFactoryBean") MybatisSqlSessionFactoryBean yunSqlSessionFactoryBean) throws Exception{

        return new SqlSessionTemplate(yunSqlSessionFactoryBean.getObject());
    }

    @Bean
    public JdbcDaoImpl securityJdbcDao() {
        JdbcDaoImpl jdbcDao = new JdbcDaoImpl();
        jdbcDao.setDataSource(dataSource());

        return jdbcDao;

    }
}

2.數據源2java

package cn.com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


@Configuration
@PropertySource({
        "classpath:jdbc.properties"
})
//value = "cn.com.demo.dao.*.mapper*",
// basePackages 必須指定該數據源分配的包路徑,意思就是再該路徑下的全部數據操做都是再指定的數據源下面進行的
@MapperScan( basePackages = "cn.com.demo.dao.oa.*.mapper", sqlSessionTemplateRef = "oaSqlSessionTemplate")
public class DataSource2Config {
    @Value("${jdbc.url2}")
    private String url;
    @Value("${jdbc.username2}")
    private String username;
    @Value("${jdbc.password2}")
    private String password;
    @Value("${jdbc.driver}")
    private String driverClass;

    @Bean(name = "oaDataSource")
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setUrl(url);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClass);
        return dataSource;
    }


    @Bean(name = "oaSqlSessionFactory")
    public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("oaDataSource") DruidDataSource dataSource) throws Exception{
        MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        mybatisSqlSessionFactoryBean.setDataSource(dataSource);
        mybatisSqlSessionFactoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/cn/com/demo/dao/*/*/mapper/*/*Mapper.xml"));
//        List<Interceptor> interceptors = new ArrayList<>();
//        Interceptor[] interceptorsArr = new Interceptor[1];
//        interceptorsArr[0] = paginationInterceptor();
////        interceptors.add(paginationInterceptor());
//        mybatisSqlSessionFactoryBean.setPlugins(interceptorsArr);

        return mybatisSqlSessionFactoryBean;
    }

    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("oaDataSource") DruidDataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "oaSqlSessionTemplate")
    public SqlSessionTemplate yunSqlSessionTemplate(
            @Qualifier("oaSqlSessionFactory") MybatisSqlSessionFactoryBean oaSqlSessionFactory) throws Exception{

        return new SqlSessionTemplate(oaSqlSessionFactory.getObject());
    }
}

3.測試spring

package cn.com.demo.test;

import cn.com.demo.dao.oa.code.entity.OaNoCode;
import cn.com.demo.dao.oa.code.mapper.OaNoCodeMapper;
import cn.com.demo.dao.yun.user.entity.User;
import cn.com.demo.service.IOaNoCodeService;
import cn.com.demo.service.IUserService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class TestMutiDataSource {

    @Autowired
    private IUserService userService;
    @Autowired
    private IOaNoCodeService oaNoCodeService;
    @Autowired
    private OaNoCodeMapper oaNoCodeMapper;

    @Test
    public void test1() {
        EntityWrapper ew = new EntityWrapper();
        ew.setEntity(new User());
        ew.eq("user_code", "A001");
        System.out.println(ew.getSqlSegment());
        System.out.println(userService.selectList(ew).toString());

        System.out.println("------------------------------>");
        ew = new EntityWrapper();
        ew.setEntity(new OaNoCode());
        ew.eq("codeid", "1");
        System.out.println(ew.getSqlSegment());
        System.out.println(oaNoCodeService.selectList(ew).toString());
        System.out.println("*************************");
        System.out.println(oaNoCodeMapper.getAll());

    }
}
相關文章
相關標籤/搜索