欧博官网:springboot mybatis plus多数据源轻松搞定 (上)

admin 3个月前 (08-04) 科技 46 1

在开发中经常会遇到一个程序需要挪用多个数据库的情形,总得来说分为下面的几种情形:

  1. 一个程序会挪用差别结构的两个数据库。
  2. 读写星散,两个数据结构可能一样高,然则差别的操作针对差别的数据库。
  3. 夹杂情形,既有差别的结构的数据库,也可能存在读写星散的情形。

下面针对第一种情形,提供一个解决方案。

解决思绪

由于两个数据库的功效和结构不一样,以是可以凭据功效和结构把DAO分为两个package。然后再mapperscan中指定差别的package对接差别的数据源,即可到达多个数据源的共存。

设置yml中的数据源设置

spring:
  datasource:
    emanage:
      url: jdbc:mysql://127.0.0.1:3306/emanage?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&useAffectedRows=true
      username: root
      password: ******
      driver-class-name: com.mysql.cj.jdbc.Driver
    ehr:
      url: jdbc:mysql://127.0.0.1:3306/ehr?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&useAffectedRows=true
      username: root
      password: ********
      driver-class-name: com.mysql.cj.jdbc.Driver

为了不必要的滋扰,我把druid数据源的设置部门给删除了。

确立两个datasource的设置

datasource1的 设置

@Configuration
@MapperScan(basePackages = {"com.emanage.ehr.mapper.emanage"},sqlSessionTemplateRef = "sqlTemplate1")
public class DataSourceConfig1 {
    @Bean(name = "datasource1")
    @ConfigurationProperties(prefix = "spring.datasource.emanage")
    public DruidDataSource druidDataSource1()
    {
        return DruidDataSourceBuilder.create().build();
    }


    @Bean(name = "sqlFactory1")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("datasource1") DruidDataSource dataSource)
            throws Exception
    {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/emanage/**Mapper.xml"));
        return factoryBean.getObject();
    }

    @Bean(name = "sqlTemplate1")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlFactory1") SqlSessionFactory sqlSessionFactory)
    {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

datasource2的设置

@Configuration
@MapperScan(basePackages = {"com.emanage.ehr.mapper.ehr"},sqlSessionTemplateRef = "sqlTemplate2")
public class DataSourceConfig2 {
    @Bean(name = "datasource2")
    @ConfigurationProperties(prefix = "spring.datasource.ehr")
    public DataSource druidDataSource1()
    {
        return DataSourceBuilder.create().build();
    }


    @Bean(name = "sqlFactory2")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("datasource2") DataSource dataSource)
            throws Exception
    {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/ehr/**Mapper.xml"));
        return factoryBean.getObject();
    }
    @Bean(name = "sqlTemplate2")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlFactory2") SqlSessionFactory sqlSessionFactory)
    {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

两个datasource的设置基本上一样。就是确立datasource,sqlsessionFactory,sqlSessionTemplate的注入。然后通过mapperscan来指定详细什么包接纳什么数据源。然后再对应包里就和以前单数据源一样操作即可。

注意事项:

若是用myBatis, SqlSessionFactory 部门可以使用SqlSessionFactoryBean来天生。然则若是用mybatis plus一定要用MybatisSqlSessionFactoryBean 来天生SqlSessionFactory。否则会报错 ,无法直接通过BaseMapper去挪用查询。
若是要再差别的包中夹杂上XML举行挪用。需要在SqlSessionFactory的设置中设置factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/ehr/**Mapper.xml"));

优瑕玷:

优点:
简朴,通过简朴的设置。就可以知足大多数的情形。

  • 瑕玷 *:只适合多个数据源的结构完全不一样,通过package可以分来的方式来挪用,不能天真的在一个package下面为所欲为的挪用数据源。

那么问题来了:若是要在一个package下面,想挪用哪个就挪用哪个数据源怎么办呢?有时间了,下一篇文章写写另外的实现方式。

希望对初学者有价值,若是有疑问迎接留言交流。

,

欧博亚洲客户端下载

欢迎进入欧博亚洲客户端下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

Sunbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:欧博官网:springboot mybatis plus多数据源轻松搞定 (上)

网友评论

  • (*)

最新评论

  • UG环球开户 2020-08-04 00:02:59 回复

    欧博注册欢迎进入欧博注册(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。耐心看呀

    1

文章归档

站点信息

  • 文章总数:642
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1010
  • 评论总数:267
  • 浏览总数:7544