MCPcopy Index your code
hub / github.com/ccwxl/multi-tenancy-spring-boot-starter

github.com/ccwxl/multi-tenancy-spring-boot-starter @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
1,026 symbols 1,991 edges 158 files 226 documented · 22%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

简介

multi-tenancy-datasource-spring-boot-starter 是一个基于springboot的多租户的开发神器. 包含了多租户场景下业务封装和组件抽象。

特性

  • 数据库隔离模型: 基于Postgresqlschemadatabase 级别隔离
  • Redis隔离模型: 为每个key增加租户前缀
  • 租户标识解析: 从Cookie, Header, Domain,URL Path,Env中解析租户标识
  • 租户标识传递: 支持Seata, Feign, RestTemplate
  • 数据源: 多个租户复用数据库Connection减少资源消耗,也可使用独立数据源
  • 动态注册租户: 基于Redis Stream在运行期注册租户
  • postgresql 中表DDL对比和模版Schema,方便新增租户和查看其差异
  • 租户业务执行器: 设置和释放当前线程的租户上下文,执行定制业务功能. 满足定制化业务处理场景
  • 扩展cola组件,使用扩展点的方式扩展租户业务. 满足定制化业务处理场景
  • 抽象租户定制化配置类TenantCustomization,租户动态脚本引擎.TenantDynamicScriptExecutor满足定制化业务逻辑的开发。
  • 动态定义接口组件,满足定制化报表类,简单CRUD类,定制化数据列表类业务

Redis

  • 为每个租户增加不同的key前缀来做数据隔离

DB

architecture.png

使用方式

  • Maven
<dependency>
    <groupId>cc.sofast.infrastructure</groupId>
    <artifactId>multi-tenancy-datasource-spring-boot-starter</artifactId>
    <version>{lastverion}</version>
</dependency>
  • Gradle
implementation 'cc.sofast.infrastructure:multi-tenancy-datasource-spring-boot-starter:{lastverion}'
  • jdk17 启动时需要的参数
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED

Extension points exported contracts — how you extend this code

CustomizationLoader (Interface)
@author wxl 租户自定义配置加载器 [8 implementers]
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/customization/CustomizationLoader.java
TenantResolver (Interface)
@author apple [9 implementers]
starter/src/main/java/cc/sofast/infrastructure/tenant/resolver/TenantResolver.java
AccountExtPt (Interface)
(no doc) [6 implementers]
example/src/main/java/cc/sofast/example/extension/AccountExtPt.java
PostgresqlCommand (Interface)
(no doc) [6 implementers]
extend/template-schema-sync/src/main/java/cc/sofast/infrastructure/jdbc/schema/postgresql/PostgresqlCommand.java
ExtensionPointI (Interface)
ExtensionPointI is the parent interface of all ExtensionPoints 扩展点表示一块逻辑在不同的业务有不同的实现,使用扩展点做接口申明,然后用Extension(扩展)去实现扩展点。 [3 …
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/extension/ExtensionPointI.java
HttpRequestTenantResolver (Interface)
@author apple [8 implementers]
starter/src/main/java/cc/sofast/infrastructure/tenant/resolver/http/HttpRequestTenantResolver.java
AccountService (Interface)
@author apple [1 implementers]
example/src/main/java/cc/sofast/example/service/AccountService.java
Diff (Interface)
@author apple [3 implementers]
extend/template-schema-sync/src/main/java/cc/sofast/infrastructure/jdbc/schema/diff/Diff.java

Core symbols most depended-on inside this repo

get
called by 35
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/TenantFunctionInvocationWrapper.java
equals
called by 23
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/Fun.java
getName
called by 20
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/customization/script/groovy/GroovyScriptEntry.java
build
called by 17
extend/template-schema-sync/src/main/java/cc/sofast/infrastructure/jdbc/schema/Schema.java
getType
called by 15
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/TenantFunctionRegistration.java
getRawType
called by 13
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/FunctionTypeUtils.java
peek
called by 11
starter/src/main/java/cc/sofast/infrastructure/tenant/TenantContextHolder.java
getKey
called by 10
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/customization/script/groovy/GroovyKey.java

Shape

Method 848
Class 154
Interface 18
Enum 6

Languages

Java100%

Modules by API surface

starter/src/main/java/cc/sofast/infrastructure/tenant/datasource/connection/TenantDatabaseMetaDataPorxy.java177 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/datasource/connection/TenantConnectionProxy.java43 symbols
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/FunctionTypeUtils.java34 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/notify/TenantEvent.java32 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/datasource/DataSourceProperty.java29 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/resolver/TenantResolverConfiguration.java27 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/resolver/TenantResolverProperties.java24 symbols
extend/template-schema-sync/src/main/java/cc/sofast/infrastructure/jdbc/schema/shell/AbstractShell.java24 symbols
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/TenantFunctionInvocationWrapper.java20 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/datasource/TenantDynamicRoutingDataSource.java15 symbols
extend/extension-point-plugin/src/main/java/cc/sofast/infrastructure/func/TenantFunctionRegistration.java15 symbols
starter/src/main/java/cc/sofast/infrastructure/tenant/datasource/TenantDataSourceProxy.java13 symbols

Datastores touched

gis_cacheDatabase · 1 repos
postgresDatabase · 1 repos
saas_shared_dbDatabase · 1 repos
t3Database · 1 repos

For agents

$ claude mcp add multi-tenancy-spring-boot-starter \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page