springboot多数据源配置--传统的xml方式(附带源码)

34 篇文章 2 订阅
14 篇文章 0 订阅

前言:

本文使用xml方式进行多数据源配置,与SqlSessionFactory指定数据源(配置类)方式相比,原理一致,但是传统的xml方式更复杂,大量的xml配置加重的工作量,同时也违背了springboot的初衷(减少繁琐的配置)

附上SqlSessionFactory指定数据源的链接:springboot多数据源配置-通过SqlSessionFactory指定的数据源来操作指定目录的XML文件的方式(附带源码)

以MySQL和Oracle两个数据库为例

目录

1、准备工作

1.1、项目中使用的基本清单

1.2、两类数据库分别新建两个测试表

1.2.1、MySQL建表及初始化数据语句

1.2.2、Oracle建表及初始化数据语句

1.3、数据库基本信息如下

2、搭建springboot项目

3、配置开始

3.1、在resource目录下,新建以下4个文件夹

3.2、在dataSource文件夹下,新建两个数据源对应的配置文件

 3.2.1、datasource-mysql-demo.properties文件

3.2.2、datasource-oracle-demo.properties文件

3.2.3、datasource-defualt.properties文件

3.3、在spring文件夹中,新建两个数据源的xml文件

3.3.1、spring-datasource-mysql.xml文件

3.3.2、spring-datasource-oracle.xml文件

3.4、在spring文件夹中,新建spring-context.xml配置文件

3.5、在springboot启动类上,指定spring配置文件加载的位置

3.6、在mybatisConfig文件夹下,新建mybatis-config.xml文件(mybatis配置文件)

4、初始化springboot配置

5、编写测试代码

5.1、新建基本的包

5.2、初始化上面包中的代码

5.2.1、Controller层:

5.2.2、Service接口层:

5.2.3、Service接口实现层:

 5.2.4、Domain实体类层:

5.2.5、Dao层:

5.3、在resource/mybatis目录下,新建2个数据源对应的2个存放xml文件的文件夹

 5.4、分别新建2个数据源的xml文件,并写测试SQL语句

 5.4.1、Demo.xml代码(MySQL数据源):

5.4.2、Demo2.xml代码(Oracle数据源)

 6、使用api工具测试接口

6.1、测试MySQL数据的接口

6.2、 测试Oracle数据的接口


1、准备工作

1.1、项目中使用的基本清单

  • springboot 2.3.7.RELEASE
  • MySQL 5.7.38
  • Oracle 19
  • mybatis-plus

1.2、两种数据库分别新建两个测试表

建表如下:

1.2.1、MySQL建表及初始化数据语句

CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;


INSERT INTO `user` VALUES (1, '张三', 18);
INSERT INTO `user` VALUES (2, '李四', 19);
INSERT INTO `user` VALUES (3, '王五', 20);
INSERT INTO `user` VALUES (4, '赵六', 19);
INSERT INTO `user` VALUES (5, '老七', 17);
INSERT INTO `user` VALUES (6, '芈八子', 18);
INSERT INTO `user` VALUES (7, '久久', 99);

1.2.2、Oracle建表及初始化数据语句

--Oracle测试表
CREATE TABLE city (
  id number(10)   not null,
  name varchar2(40),
  parent varchar2(40)
);

insert into city(id,name,parent) values(1,'广州','广东');
insert into city(id,name,parent) values(1,'深圳','广东');
insert into city(id,name,parent) values(1,'厦门','福建');
insert into city(id,name,parent) values(1,'长沙','湖南');
commit;

1.3、数据库基本信息如下

数据库类型数据库名称账号密码
MySQLdemorootroot
Oracledemo2root123456

2、搭建springboot项目

这里我就略过了,我使用的版本为2.3.7.RELEASE

这里附上项目所需的maven依赖,如下(注意Druid与mybatis的版本):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.0</version>
</dependency>
<!-- mybatis版本必须与druid版本兼容,否则无法创建DataSource -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.72</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.1</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.48</version>
    <scope>runtime</scope>
</dependency>
<!-- Oracle驱动 -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.4.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3、配置开始

步骤如下

3.1、在resource目录下,新建以下4个文件夹

说明:

文件夹名称作用

dataSource

存放数据源配置信息的properties或yaml文件

mybatis

SQL语句执行的xml文件存放位置

mybatisConfig

mybatis相关配置文件存放位置

spring

spring配置文件存放位置,多数据源的xml文件存放位置

 注意:以上3个文件都可以配置在resource下的application.properties中的(我这里拆分后,可能比较麻烦,当数据源越来越多时,建议拆分

3.2、在dataSource文件夹下,新建两个数据源对应的配置文件

如:

MySQL数据库,我新建了一个datasource-mysql-demo.properties文件

Oracle数据库,我新建了一个datasource-oracle-demo.properties文件

为了方便统一管理数据源共同的属性,再多新建一个公共配置文件:datasource-defualt.properties文件

注意:有几个数据源,就配置几个

如下图所示:

详细配置如下:

 3.2.1、datasource-mysql-demo.properties文件

#每个数据源写成独立的配置文件,方便直接移入到nacos等配置中心上
#数据库驱动,使用5版本以上的MySQL,请使用com.mysql.cj.jdbc.Driver
db.driverClassName.demo=com.mysql.jdbc.Driver
#数据库地址
db.url.demo=jdbc:mysql://127.0.0.1:3306/demo
#账号
db.username.demo=root
#密码
db.password.demo=root

3.2.2、datasource-oracle-demo.properties文件

#每个数据源写成独立的配置文件,方便直接移入到nacos等配置中心上
#Oracle数据库驱动
db.driverClassName.demo2=oracle.jdbc.OracleDriver
#数据库地址
db.url.demo2=jdbc:oracle:thin:@127.0.0.1:1521:demo2
#用户账号
db.username.demo2=root
#密码
db.password.demo2=123456

3.2.3、datasource-defualt.properties文件

#########数据源公共配置,单独写成一个文件,便于移植带nacos################
# 初始化连接数量
db.initialSize=2
# 最大并发连接数
db.maxActive=10
# 配置获取连接等待超时的时间
db.maxWait=30000
db.validationQuery=select 1 from dual
db.testWhileIdle=true
db.testOnBorrow=false
db.testOnReturn=false
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
db.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
db.minEvictableIdleTimeMillis=1800000
# 打开PSCache
db.poolPreparedStatements=true
# 指定每个连接上PSCache的大小
db.maxOpenPreparedStatements=100
# 配置监控统计拦截的filters
db.filters=stat
# 超过时间限制是否回收
db.removeAbandoned=true
# 超时时间:单位为秒,300=5分钟
db.removeAbandonedTimeout=300
# 关闭abanded连接时输出错误日志
db.logAbandoned=true
db.queryTimeout=30

3.3、在spring文件夹中,新建两个数据源的xml文件

  • MySQL数据源文件名为:spring-datasource-mysql.xml

  • Oracle数据源文件名为:spring-datasource-oracle.xml

  • 注意:有几个数据源,就配置几个,与dataSource文件夹下的properties对应

如图:

 详细配置如下(注意:复制完成后,value会显示红色,正常现象,先不管)

3.3.1、spring-datasource-mysql.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- DataSource -->
    <bean id="dataSourceMySQL" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init">
        <property name="driverClassName" value="${db.driverClassName.demo}" />
        <property name="url" value="${db.url.demo}" />
        <property name="username" value="${db.username.demo}" />
        <property name="password" value="${db.password.demo}" />
        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${db.initialSize}" />
        <!-- 最大连接数 -->
        <property name="maxActive" value="${db.maxActive}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${db.maxWait}" />
        <property name="validationQuery" value="${db.validationQuery}" />
        <property name="testWhileIdle" value="${db.testWhileIdle}" />
        <property name="testOnBorrow" value="${db.testOnBorrow}" />
        <property name="testOnReturn" value="${db.testOnReturn}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" />
        <!-- 打开PSCache -->
        <property name="poolPreparedStatements" value="${db.poolPreparedStatements}" />
        <!-- 指定每个连接上PSCache的大小 -->
        <property name="maxOpenPreparedStatements" value="${db.maxOpenPreparedStatements}" />
        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="${db.filters}" />
        <!-- 超过时间限制是否回收 -->
        <property name="removeAbandoned" value="${db.removeAbandoned}" />
        <!-- 超时时间:单位为秒,300=5分钟 -->
        <property name="removeAbandonedTimeout" value="${db.removeAbandonedTimeout}" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${db.logAbandoned}" />
    </bean>

    <bean id="transactionManagerMySQL" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceMySQL" />
        <property name="globalRollbackOnParticipationFailure" value="true" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManagerMySQL" proxy-target-class="true" />

    <!-- MyBatis配置 -->
    <bean id="sqlSessionFactoryMySQL" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSourceMySQL" />
        <property name="configLocation" value="classpath:mybatisConfig/mybatis-config.xml" />
        <property name="mapperLocations">
            <array>

<!--这里是存放SQL的xml文件位置,以后该数据源下的SQL都需要放到该文件夹中!不在该文件夹中,会报错-->
                <value>classpath*:mybatis/mysql/*.xml</value>
                <value>classpath*:mybatis/mysql/**/*.xml</value>
            </array>
        </property>
    </bean>

    <bean id="mapperScannerConfigurerMySQL" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="annotationClass" value="org.springframework.stereotype.Repository" />
        <!-- 扫描的Java包,这里也可以使用com.shuizhu.**.dao.** -->
        <property name="basePackage" value="com.shuizhu.**.dao.mysql" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryMySQL" />
        <!-- <property name="properties"> -->
        <!-- <value> -->
        <!-- mappers=tk.mybatis.mapper.common.Mapper -->
        <!-- ORDER=BEFORE -->
        <!-- </value> -->
        <!-- </property> -->
    </bean>
</beans>

3.3.2、spring-datasource-oracle.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- DataSource -->
    <bean id="dataSourceOracle" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init">
        <property name="driverClassName" value="${db.driverClassName.demo2}" />
        <property name="url" value="${db.url.demo2}" />
        <property name="username" value="${db.username.demo2}" />
        <property name="password" value="${db.password.demo2}" />
        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${db.initialSize}" />
        <!-- 最大连接数 -->
        <property name="maxActive" value="${db.maxActive}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${db.maxWait}" />
        <property name="validationQuery" value="${db.validationQuery}" />
        <property name="testWhileIdle" value="${db.testWhileIdle}" />
        <property name="testOnBorrow" value="${db.testOnBorrow}" />
        <property name="testOnReturn" value="${db.testOnReturn}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" />
        <!-- 打开PSCache -->
        <property name="poolPreparedStatements" value="${db.poolPreparedStatements}" />
        <!-- 指定每个连接上PSCache的大小 -->
        <property name="maxOpenPreparedStatements" value="${db.maxOpenPreparedStatements}" />
        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="${db.filters}" />
        <!-- 超过时间限制是否回收 -->
        <property name="removeAbandoned" value="${db.removeAbandoned}" />
        <!-- 超时时间:单位为秒,300=5分钟 -->
        <property name="removeAbandonedTimeout" value="${db.removeAbandonedTimeout}" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${db.logAbandoned}" />
    </bean>

    <bean id="transactionManagerOracle" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceOracle" />
        <property name="globalRollbackOnParticipationFailure" value="true" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManagerOracle" proxy-target-class="true" />

    <!-- MyBatis配置 -->
    <bean id="sqlSessionFactoryOracle" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSourceOracle" />
        <property name="configLocation" value="classpath:mybatisConfig/mybatis-config.xml" />
        <property name="mapperLocations">
            <array> 

<!--这里是存放SQL的xml文件位置,以后该数据源下的SQL都需要放到该文件夹中!不在该文件夹中,会报错-->
                <value>classpath*:mybatis/oralce/*.xml</value>
                <value>classpath*:mybatis/oralce/**/*.xml</value>
            </array>
        </property>
    </bean>

    <bean id="mapperScannerConfigurerOracle" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="annotationClass" value="org.springframework.stereotype.Repository" />
        <!-- 扫描的Java包,这里也可以使用com.shuizhu.**.dao.** -->
        <property name="basePackage" value="com.shuizhu.**.dao.oralce" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryOracle" />
        <!-- <property name="properties"> -->
        <!-- <value> -->
        <!-- mappers=tk.mybatis.mapper.common.Mapper -->
        <!-- ORDER=BEFORE -->
        <!-- </value> -->
        <!-- </property> -->
    </bean>
</beans>

3.4、在spring文件夹中,新建spring-context.xml配置文件

如图示:

 spring-context.xml文件详细配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 加载spring文件时,再指定加载以下路径中的文件 -->
    <import resource="classpath:spring/spring-datasource-mysql.xml" />
    <import resource="classpath:spring/spring-datasource-oracle.xml" />

    <!-- 加载自定义数据源配置文件,这里不能配错,否则无法创建DataSource的bean -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:dataSource/*.properties</value>
            </list>
        </property>
    </bean>
    
    <!-- 其他配置都不需要管,springboot都自动配置好了 -->
</beans>

3.5、在springboot启动类上,指定spring配置文件加载的位置

@ImportResource({"classpath:/spring/spring-context.xml"})//加载spring配置
//以下不能省略
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
public class ScaffoldingShuizhuApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScaffoldingShuizhuApplication.class, args);
    }
}

3.6、在mybatisConfig文件夹下,新建mybatis-config.xml文件(mybatis配置文件)

如图所示: 

mybatis-config.xml文件详细信息如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- In the configuration file, plugins location must meet the requirements as the following order: -->
    <!-- properties, settings, typeAliases, typeHandlers, objectFactory, -->
    <!-- objectWrapperFactory, plugins, environments, databaseIdProvider, mappers -->

    <settings>
        <setting name="cacheEnabled" value="true" />
        <setting name="lazyLoadingEnabled" value="false" />
        <setting name="useColumnLabel" value="true" />
        <!-- 默认的超时时间是30s -->
        <setting name="defaultStatementTimeout" value="7200" />
        <!-- <setting name="useGeneratedKeys" value="true" /> -->
        <!-- 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。默认SIMPLE -->
        <setting name="defaultExecutorType" value="REUSE" />
    </settings>

    <!-- mybatis映射文件中所用到的别名配置 -->
    <typeAliases>
    </typeAliases>
</configuration>

至此,配置完成

4、初始化springboot配置

在resource下的application.properties中,配置以下信息(可忽略)

# 应用名称
spring.application.name=scaffolding-shuizhu
# 应用服务 WEB 访问端口
server.port=8080
#开启bean冲突覆盖
spring.main.allow-bean-definition-overriding=true

5、编写测试代码

这里就是写一个测试接口,查看SQL是否能正常执行,且接口能返回数据

步骤:

5.1、新建基本的包

如:controller、service、dao、domain(实体类存放包)

如图所示:

5.2、初始化上面包中的代码

5.2.1、Controller层:

package com.shuizhu.controller;

import com.shuizhu.domain.City;
import com.shuizhu.domain.User;
import com.shuizhu.service.IDemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 睡竹
 * @date 2022/9/15
 */
@RestController
public class DemoController {

    @Resource
    private IDemoService service;

    /**
     * 测试MySQL数据源是否生效
     * @return
     */
    @RequestMapping("testMySQL")
    public Object testMySQL(){
        List<User> users = service.getUsers();
        return users;
    }

    /**
     * 测试Oracle数据源是否生效
     * @return
     */
    @RequestMapping("testOracle")
    public Object testOracle(){
        List<City> users = service.getCitys();
        return users;
    }
}

5.2.2、Service接口层:

package com.shuizhu.service;

import com.shuizhu.domain.City;
import com.shuizhu.domain.User;

import java.util.List;

/**
 * @author 睡竹
 * @date 2022/9/15
 */
public interface IDemoService {
    List<User> getUsers();
    List<City> getCitys();
}

5.2.3、Service接口实现层:

package com.shuizhu.service.impl;

import com.shuizhu.dao.mysql.DemoDao;
import com.shuizhu.dao.oracle.DemoOracleDao;
import com.shuizhu.domain.City;
import com.shuizhu.domain.User;
import com.shuizhu.service.IDemoService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 偷懒了,直接写入到同一个service
 * @author 睡竹
 * @date 2022/9/15
 */
@Service
@RequiredArgsConstructor
public class DemoService implements IDemoService {

    //MySQL的Dao构造器注入
    final DemoDao dao1;
    //Oracle的Dao构造器注入
    final DemoOracleDao dao2;

    @Override
    public List<User> getUsers() {
        List<User> users = dao1.getUsers();
        return users;
    }

    @Override
    public List<City> getCitys() {
        List<City> citys = dao2.getCitys();
        return citys;
    }
}

 5.2.4、Domain实体类层:

User实体类:

package com.shuizhu.domain;

import lombok.Data;
import java.io.Serializable;
/**
 * MySQL库user表实体类
 * @author 睡竹
 * @date 2022/9/15
 */
@Data
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private Integer id;
    private String name;
    private Integer age;
}

City实体类:

package com.shuizhu.domain;

import lombok.Data;
import java.io.Serializable;
/**
 * Oracle库city表实体类
 * @author 睡竹
 * @date 2022/9/16
 */
@Data
public class City implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String parent;
}

5.2.5、Dao层:

MySQL数据源的Dao:

package com.shuizhu.dao.mysql;

import com.shuizhu.domain.User;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
 * MySQL数据源的dao
 * @author 睡竹
 * @date 2022/9/15
 */
@Repository
public interface DemoDao {
    List<User> getUsers();
}

Oracle数据源的Dao:

package com.shuizhu.dao.oracle;

import com.shuizhu.domain.City;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
 * Oracle数据源的dao
 * @author 睡竹
 * @date 2022/9/15
 */
@Repository
public interface DemoOracleDao {
    List<City> getCitys();
}

5.3、在resource/mybatis目录下,新建2个数据源对应的2个存放xml文件的文件夹

如图所示:

 5.4、分别新建2个数据源的xml文件,并写测试SQL语句

如图所示:

 

 5.4.1、Demo.xml代码(MySQL数据源):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuizhu.dao.mysql.DemoDao">
    <select id="getUsers" resultType="com.shuizhu.domain.User">
        select id,name,age from user
    </select>
</mapper>

5.4.2、Demo2.xml代码(Oracle数据源)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuizhu.dao.oracle.DemoOracleDao">
    <select id="getCitys" resultType="com.shuizhu.domain.City">
        select id,name,parent from city
    </select>
</mapper>

至此,测试流程及代码都已实现

附上整个springboot项目完整目录结构如:

 6、使用api工具测试接口

使用api工具对接口进行测试,检验数据源是否生效

6.1、测试MySQL数据的接口

请求路径:http://127.0.0.1:9080/testMySQL

6.2、 测试Oracle数据的接口

请求路径:http://127.0.0.1:9080/testOracle

测试成功,多数据源配置生效 

案例源码位置:

多数据源配置-gitee仓库源码https://gitee.com/ct668/scaffolding-shuizhu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值