1. 替换原始 code 签名

2. 服务与模块生成器,支持指定起始端口批量端口分配

(cherry picked from commit e99da38fd4)
This commit is contained in:
chenbowen
2025-09-02 10:15:16 +08:00
committed by chenbowen
parent 9540e8fddd
commit b8f9c7016c
778 changed files with 876 additions and 801 deletions

View File

@@ -8,7 +8,7 @@ import java.time.LocalDateTime;
/** /**
* API 访问日志 * API 访问日志
* *
* @author 芋道源码 * @author ZT
*/ */
@Data @Data
public class ApiAccessLogCreateReqDTO { public class ApiAccessLogCreateReqDTO {

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
/** /**
* Key Value 的键值对 * Key Value 的键值对
* *
* @author 芋道源码 * @author ZT
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor

View File

@@ -10,7 +10,7 @@ import java.util.Arrays;
/** /**
* 通用状态枚举 * 通用状态枚举
* *
* @author 芋道源码 * @author ZT
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor

View File

@@ -6,7 +6,7 @@ import lombok.Getter;
/** /**
* 文档地址 * 文档地址
* *
* @author 芋道源码 * @author ZT
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor

View File

@@ -5,7 +5,7 @@ package cn.iocoder.yudao.framework.common.enums;
* *
* 虽然放在 yudao-spring-boot-starter-rpc 会相对合适,但是每个 API 模块需要使用到,所以暂时只好放在此处 * 虽然放在 yudao-spring-boot-starter-rpc 会相对合适,但是每个 API 模块需要使用到,所以暂时只好放在此处
* *
* @author 芋道源码 * @author ZT
*/ */
public interface RpcConstants { public interface RpcConstants {

View File

@@ -9,7 +9,7 @@ import java.util.Arrays;
/** /**
* 终端的枚举 * 终端的枚举
* *
* @author 芋道源码 * @author ZT
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter

View File

@@ -5,7 +5,7 @@ package cn.iocoder.yudao.framework.common.enums;
* *
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 enum 包下 * 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 enum 包下
* *
* @author 芋道源码 * @author ZT
*/ */
public interface WebFilterOrderEnum { public interface WebFilterOrderEnum {

View File

@@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
* 虽然说HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的 * 虽然说HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的
* 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。 * 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。
* *
* @author 芋道源码 * @author ZT
*/ */
public interface GlobalErrorCodeConstants { public interface GlobalErrorCodeConstants {

View File

@@ -25,7 +25,7 @@ package cn.iocoder.yudao.framework.common.exception.enums;
* 不限制规则。 * 不限制规则。
* 一般建议,每个模块自增。 * 一般建议,每个模块自增。
* *
* @author 芋道源码 * @author ZT
*/ */
public class ServiceErrorCodeRange { public class ServiceErrorCodeRange {

View File

@@ -10,7 +10,7 @@ import java.util.concurrent.Executors;
/** /**
* Cache 工具类 * Cache 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class CacheUtils { public class CacheUtils {

View File

@@ -13,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
/** /**
* Array 工具类 * Array 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class ArrayUtils { public class ArrayUtils {

View File

@@ -17,7 +17,7 @@ import static java.util.Arrays.asList;
/** /**
* Collection 工具类 * Collection 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class CollectionUtils { public class CollectionUtils {

View File

@@ -16,7 +16,7 @@ import java.util.function.Consumer;
/** /**
* Map 工具类 * Map 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class MapUtils { public class MapUtils {

View File

@@ -7,7 +7,7 @@ import java.util.Set;
/** /**
* Set 工具类 * Set 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class SetUtils { public class SetUtils {

View File

@@ -9,7 +9,7 @@ import java.util.Date;
/** /**
* 时间工具类 * 时间工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class DateUtils { public class DateUtils {

View File

@@ -21,7 +21,7 @@ import static cn.hutool.core.date.DatePattern.createFormatter;
/** /**
* 时间工具类,用于 {@link java.time.LocalDateTime} * 时间工具类,用于 {@link java.time.LocalDateTime}
* *
* @author 芋道源码 * @author ZT
*/ */
public class LocalDateTimeUtils { public class LocalDateTimeUtils {

View File

@@ -21,7 +21,7 @@ import java.util.Map;
/** /**
* HTTP 工具类 * HTTP 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class HttpUtils { public class HttpUtils {

View File

@@ -9,7 +9,7 @@ import java.io.File;
/** /**
* 文件工具类 * 文件工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class FileUtils { public class FileUtils {

View File

@@ -9,7 +9,7 @@ import java.io.InputStream;
/** /**
* IO 工具类,用于 {@link cn.hutool.core.io.IoUtil} 缺失的方法 * IO 工具类,用于 {@link cn.hutool.core.io.IoUtil} 缺失的方法
* *
* @author 芋道源码 * @author ZT
*/ */
public class IoUtils { public class IoUtils {

View File

@@ -21,7 +21,7 @@ import java.util.List;
/** /**
* JSON 工具类 * JSON 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class JsonUtils { public class JsonUtils {

View File

@@ -7,7 +7,7 @@ import org.apache.skywalking.apm.toolkit.trace.TraceContext;
* *
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 util 包下 * 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 util 包下
* *
* @author 芋道源码 * @author ZT
*/ */
public class TracerUtils { public class TracerUtils {

View File

@@ -9,7 +9,7 @@ import java.math.RoundingMode;
/** /**
* 金额工具类 * 金额工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class MoneyUtils { public class MoneyUtils {

View File

@@ -10,7 +10,7 @@ import java.util.List;
/** /**
* 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能 * 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能
* *
* @author 芋道源码 * @author ZT
*/ */
public class NumberUtils { public class NumberUtils {

View File

@@ -13,7 +13,7 @@ import java.util.function.Consumer;
* 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类,虽然不同 bean 工具的性能有差别,但是对绝大多数同学的项目,不用在意这点性能 * 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类,虽然不同 bean 工具的性能有差别,但是对绝大多数同学的项目,不用在意这点性能
* 2. 针对复杂的对象转换,可以搜参考 AuthConvert 实现,通过 mapstruct + default 配合实现 * 2. 针对复杂的对象转换,可以搜参考 AuthConvert 实现,通过 mapstruct + default 配合实现
* *
* @author 芋道源码 * @author ZT
*/ */
public class BeanUtils { public class BeanUtils {

View File

@@ -10,7 +10,7 @@ import java.util.function.Consumer;
/** /**
* Object 工具类 * Object 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class ObjectUtils { public class ObjectUtils {

View File

@@ -14,7 +14,7 @@ import static java.util.Collections.singletonList;
/** /**
* {@link cn.iocoder.yudao.framework.common.pojo.PageParam} 工具类 * {@link cn.iocoder.yudao.framework.common.pojo.PageParam} 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class PageUtils { public class PageUtils {

View File

@@ -16,7 +16,7 @@ import java.util.Map;
/** /**
* 客户端工具类 * 客户端工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class ServletUtils { public class ServletUtils {

View File

@@ -7,7 +7,7 @@ import java.util.Objects;
/** /**
* Spring 工具类 * Spring 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class SpringUtils extends SpringUtil { public class SpringUtils extends SpringUtil {

View File

@@ -14,7 +14,7 @@ import java.util.stream.Collectors;
/** /**
* 字符串工具类 * 字符串工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class StrUtils { public class StrUtils {

View File

@@ -14,7 +14,7 @@ import java.util.regex.Pattern;
/** /**
* 校验工具类 * 校验工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class ValidationUtils { public class ValidationUtils {

View File

@@ -17,7 +17,7 @@ import java.util.List;
/** /**
* 基于部门的数据权限 AutoConfiguration * 基于部门的数据权限 AutoConfiguration
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnClass(LoginUser.class) @ConditionalOnClass(LoginUser.class)

View File

@@ -16,7 +16,7 @@ import java.util.List;
/** /**
* 数据权限的自动配置类 * 数据权限的自动配置类
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
public class YudaoDataPermissionAutoConfiguration { public class YudaoDataPermissionAutoConfiguration {

View File

@@ -12,7 +12,7 @@ import static cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum.TENANT_
/** /**
* 数据权限针对 RPC 的自动配置类 * 数据权限针对 RPC 的自动配置类
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnClass(name = "feign.RequestInterceptor") @ConditionalOnClass(name = "feign.RequestInterceptor")

View File

@@ -16,7 +16,7 @@ import java.util.List;
/** /**
* 基于部门的数据权限 AutoConfiguration * 基于部门的数据权限 AutoConfiguration
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnClass(LoginUser.class) @ConditionalOnClass(LoginUser.class)

View File

@@ -8,7 +8,7 @@ import java.lang.annotation.*;
* 数据权限注解 * 数据权限注解
* 可声明在类或者方法上,标识使用的数据权限规则 * 可声明在类或者方法上,标识使用的数据权限规则
* *
* @author 芋道源码 * @author ZT
*/ */
@Target({ElementType.TYPE, ElementType.METHOD}) @Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@@ -12,7 +12,7 @@ import org.springframework.aop.support.annotation.AnnotationMatchingPointcut;
/** /**
* {@link cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission} 注解的 Advisor 实现类 * {@link cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission} 注解的 Advisor 实现类
* *
* @author 芋道源码 * @author ZT
*/ */
@Getter @Getter
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)

View File

@@ -16,7 +16,7 @@ import java.util.concurrent.ConcurrentHashMap;
* 1. 在执行方法前,将 @DataPermission 注解入栈 * 1. 在执行方法前,将 @DataPermission 注解入栈
* 2. 在执行方法后,将 @DataPermission 注解出栈 * 2. 在执行方法后,将 @DataPermission 注解出栈
* *
* @author 芋道源码 * @author ZT
*/ */
@DataPermission // 该注解,用于 {@link DATA_PERMISSION_NULL} 的空对象 @DataPermission // 该注解,用于 {@link DATA_PERMISSION_NULL} 的空对象
public class DataPermissionAnnotationInterceptor implements MethodInterceptor { public class DataPermissionAnnotationInterceptor implements MethodInterceptor {

View File

@@ -9,7 +9,7 @@ import java.util.List;
/** /**
* {@link DataPermission} 注解的 Context 上下文 * {@link DataPermission} 注解的 Context 上下文
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionContextHolder { public class DataPermissionContextHolder {

View File

@@ -20,7 +20,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
* 它的底层,是基于 MyBatis Plus 的 <a href="https://baomidou.com/plugins/data-permission/">数据权限插件</a> * 它的底层,是基于 MyBatis Plus 的 <a href="https://baomidou.com/plugins/data-permission/">数据权限插件</a>
* 核心原理:它会在 SQL 执行前拦截 SQL 语句,并根据用户权限动态添加权限相关的 SQL 片段。这样,只有用户有权限访问的数据才会被查询出来 * 核心原理:它会在 SQL 执行前拦截 SQL 语句,并根据用户权限动态添加权限相关的 SQL 片段。这样,只有用户有权限访问的数据才会被查询出来
* *
* @author 芋道源码 * @author ZT
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
public class DataPermissionRuleHandler implements MultiDataPermissionHandler { public class DataPermissionRuleHandler implements MultiDataPermissionHandler {

View File

@@ -10,7 +10,7 @@ import feign.RequestTemplate;
* *
* 注意:由于 {@link DataPermission} 不支持序列化和反序列化,所以暂时只能传递它的 enable 属性 * 注意:由于 {@link DataPermission} 不支持序列化和反序列化,所以暂时只能传递它的 enable 属性
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionRequestInterceptor implements RequestInterceptor { public class DataPermissionRequestInterceptor implements RequestInterceptor {

View File

@@ -14,7 +14,7 @@ import java.util.Objects;
/** /**
* 针对 {@link DataPermissionRequestInterceptor} 的 RPC 调用,设置 {@link DataPermissionContextHolder} 的上下文 * 针对 {@link DataPermissionRequestInterceptor} 的 RPC 调用,设置 {@link DataPermissionContextHolder} 的上下文
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionRpcWebFilter extends OncePerRequestFilter { public class DataPermissionRpcWebFilter extends OncePerRequestFilter {

View File

@@ -10,7 +10,7 @@ import java.util.Set;
* 数据权限规则接口 * 数据权限规则接口
* 通过实现接口,自定义数据规则。例如说, * 通过实现接口,自定义数据规则。例如说,
* *
* @author 芋道源码 * @author ZT
*/ */
public interface DataPermissionRule { public interface DataPermissionRule {

View File

@@ -6,7 +6,7 @@ import java.util.List;
* {@link DataPermissionRule} 工厂接口 * {@link DataPermissionRule} 工厂接口
* 作为 {@link DataPermissionRule} 的容器,提供管理能力 * 作为 {@link DataPermissionRule} 的容器,提供管理能力
* *
* @author 芋道源码 * @author ZT
*/ */
public interface DataPermissionRuleFactory { public interface DataPermissionRuleFactory {

View File

@@ -14,7 +14,7 @@ import java.util.stream.Collectors;
* 默认的 DataPermissionRuleFactoryImpl 实现类 * 默认的 DataPermissionRuleFactoryImpl 实现类
* 支持通过 {@link DataPermissionContextHolder} 过滤数据权限 * 支持通过 {@link DataPermissionContextHolder} 过滤数据权限
* *
* @author 芋道源码 * @author ZT
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory { public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory {

View File

@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.datapermission.core.rule.dept.DeptDataPermissi
/** /**
* {@link DeptDataPermissionRule} 的自定义配置接口 * {@link DeptDataPermissionRule} 的自定义配置接口
* *
* @author 芋道源码 * @author ZT
*/ */
@FunctionalInterface @FunctionalInterface
public interface CompanyDataPermissionRuleCustomizer { public interface CompanyDataPermissionRuleCustomizer {

View File

@@ -52,7 +52,7 @@ import static java.util.Collections.singletonList;
* 3想要保证原 dept_id 和 user_id 都可以看的到,此时使用 dept_id 和 user_id 一起过滤; * 3想要保证原 dept_id 和 user_id 都可以看的到,此时使用 dept_id 和 user_id 一起过滤;
* 最终过滤条件是 WHERE dept_id = ? OR user_id IN (?, ?, ? ...) * 最终过滤条件是 WHERE dept_id = ? OR user_id IN (?, ?, ? ...)
* *
* @author 芋道源码 * @author ZT
*/ */
@AllArgsConstructor @AllArgsConstructor
@Slf4j @Slf4j

View File

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.datapermission.core.rule.dept;
/** /**
* {@link DeptDataPermissionRule} 的自定义配置接口 * {@link DeptDataPermissionRule} 的自定义配置接口
* *
* @author 芋道源码 * @author ZT
*/ */
@FunctionalInterface @FunctionalInterface
public interface DeptDataPermissionRuleCustomizer { public interface DeptDataPermissionRuleCustomizer {

View File

@@ -1,6 +1,6 @@
/** /**
* 基于部门的数据权限规则 * 基于部门的数据权限规则
* *
* @author 芋道源码 * @author ZT
*/ */
package cn.iocoder.yudao.framework.datapermission.core.rule.dept; package cn.iocoder.yudao.framework.datapermission.core.rule.dept;

View File

@@ -9,7 +9,7 @@ import java.util.concurrent.Callable;
/** /**
* 数据权限 Util * 数据权限 Util
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionUtils { public class DataPermissionUtils {

View File

@@ -17,7 +17,7 @@ import static org.mockito.Mockito.when;
/** /**
* {@link DataPermissionAnnotationInterceptor} 的单元测试 * {@link DataPermissionAnnotationInterceptor} 的单元测试
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionAnnotationInterceptorTest extends BaseMockitoUnitTest { public class DataPermissionAnnotationInterceptorTest extends BaseMockitoUnitTest {

View File

@@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock;
/** /**
* {@link DataPermissionContextHolder} 的单元测试 * {@link DataPermissionContextHolder} 的单元测试
* *
* @author 芋道源码 * @author ZT
*/ */
class DataPermissionContextHolderTest { class DataPermissionContextHolderTest {

View File

@@ -31,7 +31,7 @@ import static org.mockito.Mockito.when;
* 主要复用了 MyBatis Plus 的 TenantLineInnerInterceptorTest 的单元测试 * 主要复用了 MyBatis Plus 的 TenantLineInnerInterceptorTest 的单元测试
* 不过它的单元测试不是很规范,考虑到是复用的,所以暂时不进行修改~ * 不过它的单元测试不是很规范,考虑到是复用的,所以暂时不进行修改~
* *
* @author 芋道源码 * @author ZT
*/ */
public class DataPermissionRuleHandlerTest extends BaseMockitoUnitTest { public class DataPermissionRuleHandlerTest extends BaseMockitoUnitTest {

View File

@@ -21,7 +21,7 @@ import static org.junit.jupiter.api.Assertions.*;
/** /**
* {@link DataPermissionRuleFactoryImpl} 单元测试 * {@link DataPermissionRuleFactoryImpl} 单元测试
* *
* @author 芋道源码 * @author ZT
*/ */
class DataPermissionRuleFactoryImplTest extends BaseMockitoUnitTest { class DataPermissionRuleFactoryImplTest extends BaseMockitoUnitTest {

View File

@@ -32,7 +32,7 @@ import static org.mockito.Mockito.when;
/** /**
* {@link DeptDataPermissionRule} 的单元测试 * {@link DeptDataPermissionRule} 的单元测试
* *
* @author 芋道源码 * @author ZT
*/ */
class DeptDataPermissionRuleTest extends BaseMockitoUnitTest { class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {

View File

@@ -15,7 +15,7 @@ import java.util.List;
* *
* 数据可见 resources/area.csv 文件 * 数据可见 resources/area.csv 文件
* *
* @author 芋道源码 * @author ZT
*/ */
@Data @Data
@AllArgsConstructor @AllArgsConstructor

View File

@@ -9,7 +9,7 @@ import java.util.Arrays;
/** /**
* 区域类型枚举 * 区域类型枚举
* *
* @author 芋道源码 * @author ZT
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter

View File

@@ -22,7 +22,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
/** /**
* 区域工具类 * 区域工具类
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class AreaUtils { public class AreaUtils {

View File

@@ -6,6 +6,6 @@
* 2. 城市功能:查询城市编码对应的城市信息 * 2. 城市功能:查询城市编码对应的城市信息
* 基于 https://github.com/modood/Administrative-divisions-of-China 实现 * 基于 https://github.com/modood/Administrative-divisions-of-China 实现
* *
* @author 芋道源码 * @author ZT
*/ */
package cn.iocoder.yudao.framework.ip; package cn.iocoder.yudao.framework.ip;

View File

@@ -10,7 +10,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
/** /**
* {@link AreaUtils} 的单元测试 * {@link AreaUtils} 的单元测试
* *
* @author 芋道源码 * @author ZT
*/ */
public class AreaUtilsTest { public class AreaUtilsTest {

View File

@@ -10,7 +10,7 @@ import java.util.Set;
/** /**
* 多租户配置 * 多租户配置
* *
* @author 芋道源码 * @author ZT
*/ */
@ConfigurationProperties(prefix = "yudao.tenant") @ConfigurationProperties(prefix = "yudao.tenant")
@Data @Data

View File

@@ -11,7 +11,7 @@ import org.aspectj.lang.annotation.Aspect;
* 忽略单位切换,标记指定方法不进行租户切换的覆盖,基于 {@link CompanyVisitIgnore} 注解实现,用于一些全局的逻辑。 * 忽略单位切换,标记指定方法不进行租户切换的覆盖,基于 {@link CompanyVisitIgnore} 注解实现,用于一些全局的逻辑。
* 例如说,一个定时任务,读取所有数据,进行处理。 * 例如说,一个定时任务,读取所有数据,进行处理。
* 又例如说,读取所有数据,进行缓存。 * 又例如说,读取所有数据,进行缓存。
* @author 芋道源码 * @author ZT
*/ */
@Aspect @Aspect
@Slf4j @Slf4j

View File

@@ -15,7 +15,7 @@ import java.lang.annotation.*;
* 1、如果添加到 Controller 类上,则该 URL 自动添加到 {@link TenantProperties#getIgnoreUrls()} 中 * 1、如果添加到 Controller 类上,则该 URL 自动添加到 {@link TenantProperties#getIgnoreUrls()} 中
* 2、如果添加到 DO 实体类上,则它对应的表名“相当于”自动添加到 {@link TenantProperties#getIgnoreTables()} 中 * 2、如果添加到 DO 实体类上,则它对应的表名“相当于”自动添加到 {@link TenantProperties#getIgnoreTables()} 中
* *
* @author 芋道源码 * @author ZT
*/ */
@Target({ElementType.METHOD, ElementType.TYPE}) @Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@@ -15,7 +15,7 @@ import org.aspectj.lang.annotation.Aspect;
* *
* 整体逻辑的实现,和 {@link TenantUtils#executeIgnore(Runnable)} 需要保持一致 * 整体逻辑的实现,和 {@link TenantUtils#executeIgnore(Runnable)} 需要保持一致
* *
* @author 芋道源码 * @author ZT
*/ */
@Aspect @Aspect
@Slf4j @Slf4j

View File

@@ -5,7 +5,7 @@ import com.alibaba.ttl.TransmittableThreadLocal;
/** /**
* 公司上下文 Holder * 公司上下文 Holder
* *
* @author 芋道源码 * @author ZT
*/ */
public class CompanyContextHolder { public class CompanyContextHolder {

View File

@@ -7,7 +7,7 @@ import com.alibaba.ttl.TransmittableThreadLocal;
/** /**
* 多租户上下文 Holder * 多租户上下文 Holder
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantContextHolder { public class TenantContextHolder {

View File

@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 拓展多租户的 BaseDO 基类 * 拓展多租户的 BaseDO 基类
* *
* @author 芋道源码 * @author ZT
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)

View File

@@ -16,7 +16,7 @@ import java.util.Map;
/** /**
* 基于 MyBatis Plus 多租户的功能,实现 DB 层面的多租户的功能 * 基于 MyBatis Plus 多租户的功能,实现 DB 层面的多租户的功能
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantDatabaseInterceptor implements TenantLineHandler { public class TenantDatabaseInterceptor implements TenantLineHandler {

View File

@@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* *
* 注意,需要保证 JobHandler 的幂等性。因为 Job 因为某个租户执行失败重试时,之前执行成功的租户也会再次执行。 * 注意,需要保证 JobHandler 的幂等性。因为 Job 因为某个租户执行失败重试时,之前执行成功的租户也会再次执行。
* *
* @author 芋道源码 * @author ZT
*/ */
@Aspect @Aspect
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@@ -11,7 +11,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
* *
* Kafka Producer 发送消息时,增加 {@link TenantKafkaProducerInterceptor} 拦截器 * Kafka Producer 发送消息时,增加 {@link TenantKafkaProducerInterceptor} 拦截器
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class TenantKafkaEnvironmentPostProcessor implements EnvironmentPostProcessor { public class TenantKafkaEnvironmentPostProcessor implements EnvironmentPostProcessor {

View File

@@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
* 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中
* 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantKafkaProducerInterceptor implements ProducerInterceptor<Object, Object> { public class TenantKafkaProducerInterceptor implements ProducerInterceptor<Object, Object> {

View File

@@ -7,7 +7,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
/** /**
* 多租户的 RabbitMQ 初始化器 * 多租户的 RabbitMQ 初始化器
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRabbitMQInitializer implements BeanPostProcessor { public class TenantRabbitMQInitializer implements BeanPostProcessor {

View File

@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
* 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中
* 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRabbitMQMessagePostProcessor implements MessagePostProcessor { public class TenantRabbitMQMessagePostProcessor implements MessagePostProcessor {

View File

@@ -13,7 +13,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
* 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中
* 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中 * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRedisMessageInterceptor implements RedisMessageInterceptor { public class TenantRedisMessageInterceptor implements RedisMessageInterceptor {

View File

@@ -17,7 +17,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
* *
* Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 * Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRocketMQConsumeMessageHook implements ConsumeMessageHook { public class TenantRocketMQConsumeMessageHook implements ConsumeMessageHook {

View File

@@ -12,7 +12,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
/** /**
* 多租户的 RocketMQ 初始化器 * 多租户的 RocketMQ 初始化器
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRocketMQInitializer implements BeanPostProcessor { public class TenantRocketMQInitializer implements BeanPostProcessor {

View File

@@ -11,7 +11,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
* *
* Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 * Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRocketMQSendMessageHook implements SendMessageHook { public class TenantRocketMQSendMessageHook implements SendMessageHook {

View File

@@ -10,7 +10,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
/** /**
* Tenant 的 RequestInterceptor 实现类Feign 请求时,将 {@link TenantContextHolder} 设置到 header 中,继续透传给被调用的服务 * Tenant 的 RequestInterceptor 实现类Feign 请求时,将 {@link TenantContextHolder} 设置到 header 中,继续透传给被调用的服务
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantRequestInterceptor implements RequestInterceptor { public class TenantRequestInterceptor implements RequestInterceptor {

View File

@@ -28,7 +28,7 @@ import java.util.Objects;
* 2. 如果请求未带租户的编号,检查是否是忽略的 URL否则也不允许访问。 * 2. 如果请求未带租户的编号,检查是否是忽略的 URL否则也不允许访问。
* 3. 校验租户是合法,例如说被禁用、到期 * 3. 校验租户是合法,例如说被禁用、到期
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class TenantSecurityWebFilter extends ApiRequestFilter { public class TenantSecurityWebFilter extends ApiRequestFilter {

View File

@@ -5,7 +5,7 @@ import java.util.List;
/** /**
* Tenant 框架 Service 接口,定义获取租户信息 * Tenant 框架 Service 接口,定义获取租户信息
* *
* @author 芋道源码 * @author ZT
*/ */
public interface TenantFrameworkService { public interface TenantFrameworkService {

View File

@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsync
/** /**
* Tenant 框架 Service 实现类 * Tenant 框架 Service 实现类
* *
* @author 芋道源码 * @author ZT
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
public class TenantFrameworkServiceImpl implements TenantFrameworkService { public class TenantFrameworkServiceImpl implements TenantFrameworkService {

View File

@@ -10,7 +10,7 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
/** /**
* 多租户 Util * 多租户 Util
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantUtils { public class TenantUtils {

View File

@@ -14,7 +14,7 @@ import java.io.IOException;
* 多租户 Context Web 过滤器 * 多租户 Context Web 过滤器
* 将请求 Header 中的 tenant-id 解析出来,添加到 {@link TenantContextHolder} 中,这样后续的 DB 等操作,可以获得到租户编号。 * 将请求 Header 中的 tenant-id 解析出来,添加到 {@link TenantContextHolder} 中,这样后续的 DB 等操作,可以获得到租户编号。
* *
* @author 芋道源码 * @author ZT
*/ */
public class TenantContextWebFilter extends OncePerRequestFilter { public class TenantContextWebFilter extends OncePerRequestFilter {

View File

@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.env.core.util.EnvUtils.HOST_NAME_VALUE;
* 多环境的 {@link EnvEnvironmentPostProcessor} 实现类 * 多环境的 {@link EnvEnvironmentPostProcessor} 实现类
* 将 yudao.env.tag 设置到 nacos 等组件对应的 tag 配置项,当且仅当它们不存在时 * 将 yudao.env.tag 设置到 nacos 等组件对应的 tag 配置项,当且仅当它们不存在时
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvEnvironmentPostProcessor implements EnvironmentPostProcessor { public class EnvEnvironmentPostProcessor implements EnvironmentPostProcessor {

View File

@@ -6,7 +6,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
/** /**
* 环境配置 * 环境配置
* *
* @author 芋道源码 * @author ZT
*/ */
@ConfigurationProperties(prefix = "yudao.env") @ConfigurationProperties(prefix = "yudao.env")
@Data @Data

View File

@@ -17,7 +17,7 @@ import java.util.List;
/** /**
* 多环境的 RPC 组件的自动配置 * 多环境的 RPC 组件的自动配置
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@EnableConfigurationProperties(EnvProperties.class) @EnableConfigurationProperties(EnvProperties.class)

View File

@@ -11,7 +11,7 @@ import org.springframework.context.annotation.Bean;
/** /**
* 多环境的 Web 组件的自动配置 * 多环境的 Web 组件的自动配置
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)

View File

@@ -9,7 +9,7 @@ import java.util.List;
/** /**
* 开发环境上下文 * 开发环境上下文
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvContextHolder { public class EnvContextHolder {

View File

@@ -26,7 +26,7 @@ import java.util.List;
* 多环境的 {@link org.springframework.cloud.client.loadbalancer.LoadBalancerClient} 实现类 * 多环境的 {@link org.springframework.cloud.client.loadbalancer.LoadBalancerClient} 实现类
* 在从服务实例列表选择时,优先选择 tag 匹配的服务实例 * 在从服务实例列表选择时,优先选择 tag 匹配的服务实例
* *
* @author 芋道源码 * @author ZT
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j

View File

@@ -11,7 +11,7 @@ import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
* 多环境的 {@link LoadBalancerClientFactory} 实现类 * 多环境的 {@link LoadBalancerClientFactory} 实现类
* 目的:在创建 {@link ReactiveLoadBalancer} 时,会额外增加 {@link EnvLoadBalancerClient} 代理,用于 tag 过滤服务实例 * 目的:在创建 {@link ReactiveLoadBalancer} 时,会额外增加 {@link EnvLoadBalancerClient} 代理,用于 tag 过滤服务实例
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvLoadBalancerClientFactory extends LoadBalancerClientFactory { public class EnvLoadBalancerClientFactory extends LoadBalancerClientFactory {

View File

@@ -9,7 +9,7 @@ import feign.RequestTemplate;
/** /**
* 多环境的 {@link RequestInterceptor} 实现类Feign 请求时,将 tag 设置到 header 中,继续透传给被调用的服务 * 多环境的 {@link RequestInterceptor} 实现类Feign 请求时,将 tag 设置到 header 中,继续透传给被调用的服务
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvRequestInterceptor implements RequestInterceptor { public class EnvRequestInterceptor implements RequestInterceptor {

View File

@@ -13,7 +13,7 @@ import java.util.Objects;
/** /**
* 环境 Utils * 环境 Utils
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvUtils { public class EnvUtils {

View File

@@ -15,7 +15,7 @@ import java.io.IOException;
* 环境的 {@link jakarta.servlet.Filter} 实现类 * 环境的 {@link jakarta.servlet.Filter} 实现类
* 当有 tag 请求头时,设置到 {@link EnvContextHolder} 的标签上下文 * 当有 tag 请求头时,设置到 {@link EnvContextHolder} 的标签上下文
* *
* @author 芋道源码 * @author ZT
*/ */
public class EnvWebFilter extends OncePerRequestFilter { public class EnvWebFilter extends OncePerRequestFilter {

View File

@@ -2,6 +2,6 @@
* 开发环境拓展,实现类似阿里的特性环境的能力 * 开发环境拓展,实现类似阿里的特性环境的能力
* 1. https://segmentfault.com/a/1190000018022987 * 1. https://segmentfault.com/a/1190000018022987
* *
* @author 芋道源码 * @author ZT
*/ */
package cn.iocoder.yudao.framework.env; package cn.iocoder.yudao.framework.env;

View File

@@ -7,7 +7,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
/** /**
* 字典用到 Feign 的配置项 * 字典用到 Feign 的配置项
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@EnableFeignClients(clients = DictDataCommonApi.class) // 主要是引入相关的 API 服务 @EnableFeignClients(clients = DictDataCommonApi.class) // 主要是引入相关的 API 服务

View File

@@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
/** /**
* 字典工具类 * 字典工具类
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class DictFrameworkUtils { public class DictFrameworkUtils {

View File

@@ -14,7 +14,7 @@ import lombok.extern.slf4j.Slf4j;
/** /**
* Excel 数据字典转换器 * Excel 数据字典转换器
* *
* @author 芋道源码 * @author ZT
*/ */
@Slf4j @Slf4j
public class DictConvert implements Converter<Object> { public class DictConvert implements Converter<Object> {

View File

@@ -10,7 +10,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
/** /**
* Excel Json 转换器 * Excel Json 转换器
* *
* @author 芋道源码 * @author ZT
*/ */
public class JsonConvert implements Converter<Object> { public class JsonConvert implements Converter<Object> {

View File

@@ -14,7 +14,7 @@ import java.math.RoundingMode;
* *
* 金额单位:分 * 金额单位:分
* *
* @author 芋道源码 * @author ZT
*/ */
public class MoneyConvert implements Converter<Integer> { public class MoneyConvert implements Converter<Integer> {

View File

@@ -14,7 +14,7 @@ import java.util.List;
/** /**
* Excel 工具类 * Excel 工具类
* *
* @author 芋道源码 * @author ZT
*/ */
public class ExcelUtils { public class ExcelUtils {

View File

@@ -15,7 +15,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
/** /**
* XXL-Job 自动配置类 * XXL-Job 自动配置类
* *
* @author 芋道源码 * @author ZT
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnClass(XxlJobSpringExecutor.class) @ConditionalOnClass(XxlJobSpringExecutor.class)

Some files were not shown because too many files have changed in this diff Show More