// +====================================================================== // | 小蚂蚁云·企业数字化开发平台 [ 加速数字化转型,构建智能未来 ] // +---------------------------------------------------------------------- // | 核心价值:赋能开发者 · 服务企业 · 共建生态 // +---------------------------------------------------------------------- // | Copyright (c) 2020-2026 小蚂蚁云团队 版权所有 // +---------------------------------------------------------------------- // | 官方平台: https://www.xiaomayicloud.com // +====================================================================== // | 【知识产权声明】 // | 1. 权属声明:本软件是受《中华人民共和国著作权法》 // | 保护的专有财产,完整版权归小蚂蚁云团队所有 // | 2. 权利范围:所有知识产权(商标、专利、著作权、 // | 商业秘密等)均归小蚂蚁云团队所有,受法律保护 // | 3. 授权性质:用户仅可获得有限的、非独占的使用许可 // | 4. 禁止行为:未经书面授权,禁止对本软件本身 // | 申请任何知识产权 // | 5. 权利保留:未在本协议中明示授予的一切权利 // | 均由小蚂蚁云团队保留 // +====================================================================== // | 【授权状态说明】 // | 1. 未授权状态:用户未购买有效的商业许可证 // | 2. 商业授权:已购买正式商业许可证的用户 // +====================================================================== // | 【绝对禁止条款】 // | 无论授权状态如何,任何用户均严格禁止以下行为: // | 1. 逆向工程:对软件进行反编译、反汇编、技术破解或任何形式的逆向分析 // | 2. 版权破坏:移除、修改、遮挡软件中的版权标识、许可控制或技术保护措施 // | 3. 非法传播:复制、分发、出租、出借、转售、再许可本软件或其许可权利 // | 4. 竞争性使用:利用本软件的代码、架构、设计开发直接竞争的产品或服务 // | 5. 侵权使用:将软件用于侵犯第三方知识产权或其他合法权益的用途 // +====================================================================== // | 【商业授权许可范围】 // | 购买有效商业许可证的用户,在遵守上述禁止条款的前提下,获得: // | 1. 使用权利:在许可证约定的项目数量、开发者数量范围内使用本软件 // | 2. 技术支持:商业授权用户可以获取本地开发部署的技术支持服务 // | 3. 版本更新:在许可证有效期内获取软件更新、安全补丁和功能增强 // | 4. 商业部署:将基于本软件开发的应用程序用于商业运营和生产环境 // +====================================================================== // | 【许可证获取】 // | 1. 获取途径:仅通过小蚂蚁云官方渠道购买(官网、授权代理商),购买记录凭证 // | 2. 转让限制:许可证与购买主体绑定,未经书面同意不得转让 // | 3. 终止情形:许可证到期、违反协议、破产清算等情况下自动终止 // +====================================================================== // | 【合法使用要求】 // | 1. 仅限用于合法合规的软件研发 // | 2. 严禁用于任何违法、侵权或恶意行为 // | 3. 严禁违反我国法律法规和政策 // +====================================================================== // | 【免责声明】 // | 因使用本框架导致的以下情况,我们概不负责: // | 1. 项目研发中的意外、疏忽、违约等风险 // | 2. 侵犯第三方知识产权或其他合法权益 // | 3. 任何直接、间接、附带或衍生一切损失 // | 4. 用户违规违法行为的一切法律后果 // +====================================================================== // | 【协议重要提示】 // | 1. 本声明是《小蚂蚁云最终用户许可协议》的摘要版本 // | 2. 下载、安装或使用本软件即表示您接受全部协议条款 // | 3. 我们保留单方面修改本声明的权利,修改后的版本在官网公布即生效 // | 4. 用户有义务定期查看最新版本,继续使用视为接受修改 // +====================================================================== // | 【侵权举报与合规】 // | 1. 知识产权侵权举报:请联系官方客服 // | 2. 许可证合规咨询:xiaomayicloud@163.com // | 3. 违规使用将终止授权并追究责任 // | 4. 无条件配合司法机关调查取证 // | 5. 保留一切法律追诉权利 // | 6. 对有效举报和合规建议,我们将给予感谢和奖励 // +====================================================================== package com.xiaomayi.tenant; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.xiaomayi.core.utils.ReflectUtils; import com.xiaomayi.redis.RedissonAutoConfiguration; import com.xiaomayi.redis.config.RedissonProperties; import com.xiaomayi.tenant.config.TenantProperties; import com.xiaomayi.tenant.handler.MultiTenantLineHandler; import com.xiaomayi.tenant.handler.TenantPrefixMapper; import lombok.AllArgsConstructor; import org.redisson.config.ClusterServersConfig; import org.redisson.config.SingleServerConfig; import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; /** *

* 多租户自动配置类 *

* * @author 小蚂蚁云团队 * @since 2023-06-16 */ @EnableConfigurationProperties(TenantProperties.class) @AutoConfiguration(after = {RedissonAutoConfiguration.class}) @ConditionalOnProperty(value = "tenant.enable", havingValue = "true") @AllArgsConstructor public class TenantAutoConfiguration { /** * Mybatis配置 */ static class MybatisPlusConfiguration { /** * 注册多租户拦截插件 * * @param tenantProperties 租户属性配置 * @return 返回结果 */ @Bean public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) { return new TenantLineInnerInterceptor(new MultiTenantLineHandler(tenantProperties)); } } /** * 注册Bean * * @param redissonProperties 缓存属性 * @return 返回结果 */ @Bean public RedissonAutoConfigurationCustomizer tenantRedissonCustomizer(RedissonProperties redissonProperties) { return config -> { TenantPrefixMapper tenantPrefixMapper = new TenantPrefixMapper(redissonProperties.getKeyPrefix()); // 单节点模式 SingleServerConfig singleServerConfig = ReflectUtils.invokeGetter(config, "singleServerConfig"); if (ObjectUtil.isNotNull(singleServerConfig)) { // 使用单机模式 // 设置多租户 redis key前缀 singleServerConfig.setNameMapper(tenantPrefixMapper); ReflectUtils.invokeSetter(config, "singleServerConfig", singleServerConfig); } // 多节点模式 ClusterServersConfig clusterServersConfig = ReflectUtils.invokeGetter(config, "clusterServersConfig"); // 集群配置方式 参考下方注释 if (ObjectUtil.isNotNull(clusterServersConfig)) { // 设置多租户 redis key前缀 clusterServersConfig.setNameMapper(tenantPrefixMapper); ReflectUtils.invokeSetter(config, "clusterServersConfig", clusterServersConfig); } }; } }