由于公司框架需要升级为saas系统 看了许多没有觉得太合适的于是决定自行搭建一个
我是java开发 所以我准备使用springboo t前端使用vue顺便学习下前端
首先多租户系统 尽量要把数据隔开 随后选型了mybatisplus dynamic的多数据源 官方文档
好了 开发开始
首先创建一个基础项目随后导入依赖
<?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.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.demo</groupId>
<artifactId>saas</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>saas</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--spring-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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.3.1</version>
</dependency>
<!--mybatis-plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1</version>
</dependency>
<!--数据连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!--p6spy sql打印-->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
<!--hutool utils集合-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
依赖版本不需要太新 否则会导致不能确定的问题 我遇到了Invalid bound statement (not found)这个问题
创建两个数据库用来测试动态数据库 每个数据库中创建个表来验证
首先创建数据库1 随后建表
CREATE TABLE `sys_user` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`USERNAME` varchar(255) DEFAULT NULL COMMENT '用户名',
`PASSWORD` varchar(255) DEFAULT NULL COMMENT '密码',
`PHONE_NUMBER` varchar(255) DEFAULT NULL COMMENT '手机号',
`DESCRIPTION` varchar(500) DEFAULT NULL COMMENT '个人简介',
`STATUS` tinyint(2) DEFAULT NULL COMMENT '状态',
`DEPT_ID` bigint(20) DEFAULT NULL COMMENT '机构id',
`COMPANY_ID` bigint(20) DEFAULT NULL COMMENT '公司ID',
`CREATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT=' 用户表';
数据2同理
这里贴一下yml的配置
server:
port: 8088
spring:
datasource:
druid: #数据库连接池 查看sql
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
# p6spy: true # 默认false,可以单个数据源配置
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
datasource:
master:
p6spy: false
url: jdbc:mysql://192.168.1.136:3306/saas?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: admin
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
no1:
p6spy: false
url: jdbc:mysql://192.168.1.136:3306/saas1?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
username: root
password: admin
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
#mybatis plus 设置
mybatis-plus:
type-aliases-package: com.demo.saas.system.entity
mapper-locations: classpath:com/demo/saas/system/mapper/xml/*Mapper.xml
然后写两个接口同时执行同样的查询语句
写两个api 使用postman测试一下
返回了不同的数据 ok 是我们想要的结果 今天就到这里