源代码下载
链接:https://pan.baidu.com/s/1xXdbLuigUQYUtknaODew8A
提取码:x9jm
文章目录
一 创建springboot项目
创建项目
我的IDE是IDEA
File->NEW -> Project
选择Spring Initializr 点击next
修改项目名等信息 --> 点击Next
选择 Lombok、Spring Web、JDBC API、MYSQL Driver 、Oracle Driver (我这里是阿里云的镜像 根据自己的镜像选择对应的Dependencies)
添加依赖
创建好后添加多数据源依赖
<!-- druid连接池依赖 -->
<!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) -->
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>druid-spring-boot-starter</artifactId>-->
<!-- <version>1.2.4</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<!--多数据源依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
完整版pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yuan</groupId>
<artifactId>demoyuan</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demoyuan</name>
<description>Spring整合多数据源</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<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>
</dependency>
<!-- druid连接池依赖 -->
<!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) -->
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>druid-spring-boot-starter</artifactId>-->
<!-- <version>1.2.4</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<!--多数据源依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!-- framework: mybatis-plus代码生成需要一个模板引擎 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--mp代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建application.yml
代码:
# DataSource Config
spring:
datasource:
dynamic:
primary: master # 配置默认数据库
datasource:
resources:
static-locations: classpath:/static/
master: # 数据源1配置
# 我的本地連接要將uerSSL改成true 或者將driver-class-name 改成com.mysql.jdbc.Driver驱动
# 因为mysql5及之前的版本使用的是旧版驱动"com.mysql.jdbc.Driver",
# mysql6以及之后的版本需要更新到新版驱动,对应的Driver是"com.mysql.cj.jdbc.Driver"
# 换成自己的ip+库 mysql的配置
url: jdbc:mysql://127.0.0.1:3306/tongbu?characterEncoding=utf8&useUnicode=true&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# mysql5用 com.mysql.jdbc.Driver mysql6以上com.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.jdbc.Driver
slave: # 数据源2 mysql 配置
url: jdbc:mysql://127.0.0.1:3306/tongbu2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
slave2: # 数据源2配置 oracle的配置
url: jdbc:oracle:thin:@192.168.188.103:1521:helowin
username: LSZ
password: 123
driver-class-name: oracle.jdbc.driver.OracleDriver
logging: #myabtis log Plugin配置
level:
com: debug
创建mapper (使用mybatis整合mysql1的数据)
创建TableDao.java
@DS 注解 : (@DS=数据源名称) 具体详情可以百度一下 这个很重要
@DS注解可用于方法或类上。若同时存在,则方法上的注解优先于类上的注解。
官网推荐@DS注解在service层使用,且是实现类上使用,在接口层无效。
注解用在service实现或mapper接口方法上,
不要同时在service和mapper注解 。
package com.yuan.demoyuan.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
@Mapper
@DS("slave")
public interface TableDao {
//查询当前库的所有表 信息 0
@Select("select * from information_schema.TABLES where TABLE_SCHEMA=(select database())")
List<Map> listTable();
//查询当前表的所有字段和信息 0
@Select("select * from information_schema.COLUMNS where TABLE_SCHEMA = (select database()) and TABLE_NAME=#{tableName}")
List<Map> listTableColumn(String tableName);
//查询当前表的所有信息 1 仅返回对象
@Select("select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=(select database())")
List<String> listTableName2();
//查询当前表的所有信息 1 返回字段名称和对象
@Select("SELECT * FROM ${columnName}")
List<Map> list(String columnName);
}
创建jdbcTemplate(使用mybatis整合mysql2的数据)
创建UserService2.java 和 UserServiceImpl2.java
- UserService2.java
package com.yuan.demoyuan.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务类
* </p>
*
* @author 深林中的书海
* @since 2021-03-24
*/
@Service
public interface UserService2 {
List<Map<String, Object>> selectAll();
}
- UserServiceImpl2.java
package com.yuan.demoyuan.service.serviceimpl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuan.demoyuan.service.UserService2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author 深林中的书海
* @since 2021-03-24
*/
/**
*
* jdbcTemplate整合数据源
*/
@Service
public class UserServiceImpl2 implements UserService2 {
@Autowired
private JdbcTemplate jdbcTemplate;
@DS("slave")
public List<Map<String, Object>> selectAll(){
List<Map<String, Object>> lists = jdbcTemplate.queryForList("select * from user1");
return lists;
}
}
使用Test测试
package com.yuan.demoyuan;
import com.yuan.demoyuan.mapper.TableDao;
import com.yuan.demoyuan.service.UserService2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Map;
@SpringBootTest
class DemoyuanApplicationTests {
@Autowired
TableDao tableDao;
@Autowired
UserService2 userService2;
@Test
void contextLoads() {
System.err.println("调用TableDao测试 调用mysql1的");
List<Map> maps = tableDao.listTable();
maps.forEach(m->{
m.forEach((k,v)->{
System.err.println("打印k:"+k+"\t打印v:"+v);
});
});
System.out.println();
System.err.println("jdbcTemplate整合数据源 整合mysql2");
userService2.selectAll();
List<Map<String, Object>> maps1 = userService2.selectAll();
maps1.forEach(m->{
m.forEach((k,v)->{
System.err.println("打印k:"+k+"\t打印v:"+v);
});
});
}
/**
* 调用TableDao测试 调用mysql1的
*/
@Test
void listTable() {
List<Map> maps = tableDao.listTable();
maps.forEach(m->{
m.forEach((k,v)->{
System.err.println("打印k:"+k+"\t打印v:"+v);
});
});
}
/**
* jdbcTemplate整合数据源
* 整合mysql2
*/
@Test
void selectAll() {
userService2.selectAll();
List<Map<String, Object>> maps = userService2.selectAll();
maps.forEach(m->{
m.forEach((k,v)->{
System.err.println("打印k:"+k+"\t打印v:"+v);
});
});
}
}
测试效果