springboot中mybatis多数据源的示例分析

这篇文章主要为大家展示了“spring boot中mybatis多数据源的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring boot中mybatis多数据源的示例分析”这篇文章吧。

创新互联公司是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序开发,10年建站对成都格栅板等多个行业,拥有丰富设计经验。

在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源,觉得性能不太好,先在又新用到了一种使用方式,觉得不错,记录下来。

介绍一下DEMO项目,使用的spring boot集成mybatis,mybatis查询数据库是基于注解形式查询的,目的查询两个数据库test1和test2的用户信息,并在控制台打印。

1.pom文件


    
      org.springframework.boot
      spring-boot-starter-web
    
    
      org.mybatis.spring.boot
      mybatis-spring-boot-starter
      2.1.1
    
    
      com.alibaba
      druid-spring-boot-starter
      1.1.10
    
    
      MySQL
      mysql-connector-java
      runtime
      5.1.27
    
    
      org.springframework.boot
      spring-boot-starter-test
      test
      
        
          org.junit.vintage
          junit-vintage-engine
        
      
    
  

  
    
      
        src/main/java
        
          
            **/*.xml
          
        
      
      
        src/resources
      
    
    
      
        org.springframework.boot
        spring-boot-maven-plugin
      
    
  

其中添加了alibaba的druid的数据源代替了spring boot默认的hikacp,注意mysql的驱动的版本号要与自己所使用的mysql的版本号保持一致,其中build模块里面的resources里面是为了防止spring boot 过滤掉src/main/java的XML文件,毕竟有的人喜欢mybatsi查询数据库的时候使用的是XML映射文件,不过我们本次使用的 是注解的形式 ,所以里面的内容在项目中没有用到。如果直接使用注解,可以忽略该内容。

2.用户类

public class User {
  public Integer id;
  public String name;
  public String address;

  @Override
  public String toString() {
    return "User{" +
        "id=" + id +
        ", name='" + name + '\'' +
        ", address='" + address + '\'' +
        '}';
  }
    //get set方法省略...........
}

用户类没有什么好说的,就是基本的几个属性。

3.application.properties文件配置

spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.url=jdbc:mysql://localhost:3306/test1

spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.url=jdbc:mysql://localhost:3306/test2

这里主要配置了两个数据库的访问属性,注意两个的区别为one何two的前缀不同,方便在下面使用spring boot的类安全属性的方式创建不同的数据源。

4.根据不同的前缀创建不同的数据源

@Configuration
public class DataSourceConfig {
  @Bean
  @ConfigurationProperties(prefix = "spring.datasource.one")
  public DataSource dsOne(){
    return DruidDataSourceBuilder.create().build();
  }
  @Bean
  @ConfigurationProperties(prefix = "spring.datasource.two")
  public DataSource dsTwo(){
    return DruidDataSourceBuilder.create().build();
  }
}

该类位于主目录的config目录下面,使用@ConfigurationProperties注解表明对应的DataSource创建的时候使用的配置文件的内容。

5.在主目录下面分别创建mapper1和mapper2包,在对应的包下面创建对应的数据层访问接口UserMapper1和UserMapper2,内容都如下所示

@Mapper
public interface UserMapper1 {
  @Select("select * from users")
  List getAllUser();
}

这接口里面没有什么好说的就是一个简单的mytatis的基于注解的查询所有用户的接口。

6.在config包下面创建不同的配置类MybatisConfigOne和MybatisConfigTwo两个类分别对应去扫描mapper1和mapper2两个路径下面的dao层接口。

@Configuration
@MapperScan(basePackages = "com.hopec.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",
    sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisConfigOne {
  @Autowired
  @Qualifier("dsOne")
  DataSource ds1;
@Bean
  SqlSessionFactory sqlSessionFactory1(){
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(ds1);
    try {
      return bean.getObject();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  @Bean
  SqlSessionTemplate sqlSessionTemplate1(){
    return new SqlSessionTemplate(sqlSessionFactory1());
  }
}
public class MybatisConfigTwo {
  @Autowired
  @Qualifier("dsTwo")
  DataSource ds2;
@Bean
  SqlSessionFactory sqlSessionFactory2(){
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(ds2);
    try {
      return bean.getObject();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  @Bean
  SqlSessionTemplate sqlSessionTemplate2(){
    return new SqlSessionTemplate(sqlSessionFactory2());
  }
}

7.测试

@SpringBootTest
class MybatisApplicationTests {
  @Autowired
  UserMapper1 userMapper1;
  @Autowired
  UserMapper2 userMapper2;
  @Test
  void contextLoads() {
    List users = userMapper1.getAllUser();
    System.out.println(users);
    List allUser = userMapper2.getAllUser();
    System.out.println(allUser);

  }
}

测试结果:

spring boot中mybatis多数据源的示例分析

以上是“spring boot中mybatis多数据源的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


分享标题:springboot中mybatis多数据源的示例分析
本文网址:http://scjbc.cn/article/jcjopd.html

其他资讯