springboot+maybatis+多数据源配置

简介: springboot+maybatis+多数据源配置

填坑填坑填坑填坑填坑填坑填坑填坑填坑填坑填坑,如果使用druid连接池一定要查看下面这篇文章:

pringboot+maybatis+多数据源配置

springboot数据库信息配置文件:

#mySQL
spring.datasource.secondary.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://127.0.0.1:3306/testdb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
#Oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:testuserdb
spring.datasource.username=root
spring.datasource.password=root


注解介绍:

@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常

@Configuration:把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@MapperScan:通过使用@MapperScan可以指定要扫描的Mapper类的包的路径


配置第一个数据源:

@Configuration
// 扫描 Mapper 接口并容器管理
@SpringBootApplication
@MapperScan(basePackages = OneMappingConfig.PACKAGE, sqlSessionFactoryRef = "oneSqlSessionFactory")
public class OneMappingConfig {
    // 精确到 onedao目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.my.maple.onedao";
    static final String MAPPER_LOCATION = "classpath:/mapper/onemapper/*.xml";
    @Bean(name = "oneDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource oneDataSource() {
      return DataSourceBuilder.create().build();
    }
    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource oneDataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(oneDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(OneMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
    @Bean(name = "oneTransactionManager")
    @Primary
    public DataSourceTransactionManager oneTransactionManager(@Qualifier("oneDataSource") DataSource oneDataSource) {
        return new DataSourceTransactionManager(oneDataSource);
    }
    @Bean(name = "oneSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate oneSqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}


配置第二个数据源:

@Configuration
@SpringBootApplication
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = TwoMappingConfig.PACKAGE, sqlSessionFactoryRef = "twoSqlSessionFactory")
public class TwoMappingConfig {
    static final String PACKAGE = "com.my.maple.twodao";
    static final String MAPPER_LOCATION = "classpath:/mapper/twomapper/*.xml";
    @Bean(name = "twoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource twoDataSource() {
      return DataSourceBuilder.create().build();
    }
    @Bean(name = "twoSqlSessionFactory")
    public SqlSessionFactory twoSqlSessionFactory(@Qualifier("twoDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(TwoMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
    @Bean(name = "twoTransactionManager")
    public DataSourceTransactionManager twoTransactionManager(@Qualifier("twoDataSource") DataSource masterDataSource) {
        return new DataSourceTransactionManager(masterDataSource);
    }
    @Bean(name = "twoSqlSessionTemplate")
    public SqlSessionTemplate twoSqlSessionTemplate(@Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

不同数据源获取测试:

Controller

@RestController
@RequestMapping("/test")
public class TestController {
  @Autowired
  private TestService testService;
  @PostMapping(value = "/index")
  public JSONObject index(){
    JSONObject json = new JSONObject();
    List<One> oneData = testService.selectOneData();
    List<Two> twoData = testService.selectTwoData();
    json.put("oneData", oneData);
    json.put("twoData", twoData);
    return json;
  }
}

Service

@Service("testService")
public class TestServiceImpl implements TestService{
  @Autowired
  private OneMapper oneMapper;
  @Autowired
  private TwoMapper twoMapper;
  @Override
  public List<One> selectOneData() {
    return oneMapper.getOneData();
  }
  @Override
  public List<Two> selectTwoData() {
    return twoMapper.getTwoData();
  }
}

OneMapper.java

@Mapper
public interface OneMapper extends BaseMapper<One> {
  List<One> getOneData();
}

TwoMapper.java

@Mapper
public interface TwoMapper extends BaseMapper<Two> {
  List<Two> getTwoData();
}


OneMapper.xml

<select id="getOneData" resultMap="BaseResultMap">
      SELECT * FROM ONE
    </select>

TwoMapper.xml

<select id="getTwoData" resultMap="BaseResultMap">
      SELECT * FROM TWO
    </select>


测试结果:

{
    "twoData": [
        {
            "id": 1,
            "twoAaa": "数据库2数据aaa",
            "twoBbb": "数据库2数据bbb",
            "twoCcc": "数据库2数据ccc",
            "twoDdd": "数据库2数据ddd"
        },
        {
            "id": 2,
            "twoAaa": "数据库2",
            "twoBbb": "数据库2",
            "twoCcc": "数据库2",
            "twoDdd": "数据库2"
        }
    ],
    "oneData": [
        {
            "id": 1,
            "oneAaa": "数据库1数据aaa",
            "oneBbb": "数据库1数据bbb",
            "oneCcc": "数据库1数据ccc",
            "oneDdd": "数据库1数据ddd"
        },
        {
            "id": 2,
            "oneAaa": "数据库1",
            "oneBbb": "数据库1",
            "oneCcc": "数据库1",
            "oneDdd": "数据库1"
        }
    ]
}


目录
相关文章
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
50 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
58 4
|
2月前
|
Java 数据库连接 Maven
springBoot:项目建立&配置修改&yaml的使用&resource 文件夹(二)
本文档介绍了如何创建一个基于Maven的项目,并配置阿里云仓库、数据库连接、端口号、自定义启动横幅及多环境配置等。同时,详细说明了如何使用YAML格式进行配置,以及如何处理静态资源和模板文件。文档还涵盖了Spring Boot项目的`application.properties`和`application.yaml`文件的配置方法,包括设置数据库驱动、URL、用户名、密码等关键信息,以及如何通过配置文件管理不同环境下的应用设置。
244 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
42 0
|
3天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
37 14
|
26天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
42 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
43 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
28天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
29 3
|
1月前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
59 8
下一篇
DataWorks