美文网首页
springboot配置mybatis多数据源

springboot配置mybatis多数据源

作者: 昨日已逝去 | 来源:发表于2019-02-27 09:59 被阅读0次

    springboot配置mybatis多数据源

    原文在github,有些相对路径连接不能跳转,如想看原文项目地址 spingboot2.1.3加springcloud G版本,如果觉的不错给个star 谢谢!

    所谓多数据源,其实连接两dataSource,而每个dataSource生成的sqlFactory管理着不同的xml。
    只要使用时,根据业务选择自己所需的mapper即可。
    

    springboot1.x时,可用DataSourceBuilder进行生成数据源,2.x以后必须手动配置数据源。

    • 1.x配置
    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    
    • 2.x配置
    @Autowired
    Environment env;
    @Bean(name = "test1DataSource")
    @Primary
    public DataSource testDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("test1.driverClassName"));
        dataSource.setUrl(env.getProperty("test1.url"));
        dataSource.setUsername(env.getProperty("test1.username"));
        dataSource.setPassword(env.getProperty("test1.password"));
        return dataSource;
    }
    

    项目搭建

    • applicaiton.properties配置文件
    mybatis.config-locations=classpath:mybatis/mybatis-config.xml
    
    test1.driverClassName= com.mysql.cj.jdbc.Driver
    test1.url = jdbc:mysql://localhost:3306/zwdtest?useUnicode=true
    test1.username = root
    test1.password = root
    
    
    test2.driverClassName = com.mysql.cj.jdbc.Driver
    test2.url = jdbc:mysql://localhost:3306/zwdtest?useUnicode=true
    test2.username = root
    test2.password = root
    

    根据自己需求添加或更改所需数据源。

    • 配置类(重点)
      每个datasource都对应着自己的配置类,这里查看一下test1的配置上类。如下
    @Configuration
    @MapperScan(basePackages = "com.neo.mapper.test1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")
    public class DataSource1Config {
    
        @Autowired
        Environment env;
        @Bean(name = "test1DataSource")
        @Primary
        public DataSource testDataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName(env.getProperty("test1.driverClassName"));
            dataSource.setUrl(env.getProperty("test1.url"));
            dataSource.setUsername(env.getProperty("test1.username"));
            dataSource.setPassword(env.getProperty("test1.password"));
            return dataSource;
        }
    
        @Bean(name = "test1SqlSessionFactory")
        @Primary
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "test1TransactionManager")
        @Primary
        public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "test1SqlSessionTemplate")
        @Primary
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    }
    

    @MapperScan(basePackages = "com.neo.mapper.test1"扫描对应的包。

    classpath:mybatis/mapper/test1/*.xml是此sqlfactory所能操作的xml的路径。不同的连接路径不同。

    • 如何使用

    从项目目录可以看出mapper分为test1,test2,这是连接两个不同的数据库,当我们想要操作时,只需要选择不同包下的mapper。

    项目地址

    相关文章

      网友评论

          本文标题:springboot配置mybatis多数据源

          本文链接:https://www.haomeiwen.com/subject/dokxuqtx.html