世界杯logo

从零开始搭建saas系统(1)

由于公司框架需要升级为saas系统 看了许多没有觉得太合适的于是决定自行搭建一个

我是java开发 所以我准备使用springboo t前端使用vue顺便学习下前端

首先多租户系统 尽量要把数据隔开 随后选型了mybatisplus dynamic的多数据源 官方文档

好了 开发开始

首先创建一个基础项目随后导入依赖

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.demo

saas

0.0.1-SNAPSHOT

saas

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

com.baomidou

dynamic-datasource-spring-boot-starter

3.3.1

com.baomidou

mybatis-plus-boot-starter

3.3.1

com.baomidou

mybatis-plus-generator

3.3.1

com.alibaba

druid-spring-boot-starter

1.2.4

p6spy

p6spy

3.9.1

cn.hutool

hutool-all

5.5.8

org.freemarker

freemarker

2.3.30

org.springframework.boot

spring-boot-starter-test

test

org.apache.commons

commons-lang3

3.10

org.springframework.boot

spring-boot-maven-plugin

src/main/java

**/*.xml

依赖版本不需要太新 否则会导致不能确定的问题 我遇到了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 是我们想要的结果 今天就到这里