首页 文章 精选 留言 我的

精选列表

搜索[企业级],共10000篇文章
优秀的个人博客,低调大师

JuiceFS sync 原理解析与性能优化,企业级数据同步利器

JuiceFS sync 是一款强大的数据同步工具,支持在对象存储、JuiceFS、本地文件系统之间进行数据同步。sync 能将大规模全量迁移的效率提升到接近链路带宽上限,使 PB 级数据迁移通常具备"按天/周"量级的可行性(具体时长取决于带宽与云端限速)除此之外,还支持通过 SSH 访问远程目录、HDFS、WebDAV 等,同时提供增量同步、模式匹配(类似 rsync)、分布式同步等高级功能。 本文将围绕 sync 的核心执行原理展开,介绍其在单机与集群模式下的架构与任务调度机制,并详细说明如何通过并发优化提升性能。同时,还将介绍 sync 提供的多维过滤能力、灵活的路径模式匹配方式,以及数据一致性校验机制,帮助用户更好地理解并使用这一工具进行高效、可靠的数据同步。 01 核心原理 sync 在单机模式与集群模式下的核心执行原理是一致的,主要区别体现在部署方式与任务分发通道上。因此,本节以单机模式为例进行原理讲解,集群模式的差异将在后文单独说明。 如下图所示,sync 的整体架构可抽象为典型的 Producer--Consumer(生产者--消费者)模型: Producer 负责遍历源端和目标端对象存储中的全部 key,并对两端的有序结果进行归并(merge),据此判断对象是否需要同步、删除或校验,并将生成的任务写入任务队列; Consumer 则从队列中不断取出任务,完成实际操作。 在单机模式下,Producer 和 Consumer 运行在同一进程内,通过 goroutine(轻量级协程)并发协作。 在 Producer 阶段,之所以需要同时遍历目标端,是因为 sync 不仅要同步源端数据,还支持按配置删除目标端多余对象,并结合对象在目标端的存在与差异状态,为每个 key 决定生成何种任务。目前支持五类任务:同步、删除源端、删除目标端、拷贝权限、校验。 接下来进一步展开 Producer 阶段任务生成的具体机制。 为了提升任务生成效率,sync 要求对象存储的遍历(list)接口返回结果必须是有序的,即按 key 递增(例如按字典序)排列。依赖这种有序性,Producer 可以同时对源端和目标端对象存储进行线性扫描,并逐一比较当前 key 的值,以判定是否需要生成同步任务。 以图中展示的归并过程为例,sync 同步遍历源端与目标端,分别读取当前位置的 key,例如源端为 file1,目标端为 file2: 若 src key < dst key(例如:file1 < file2)需生成一个同步任务;随后源端指针前移,继续与目标端当前 key 比较; 若两端当前 key 相同(例如:均为 file2),说明该对象在两端均存在,可根据策略判断是否跳过或执行进一步校验;此时两个指针同时前移; 若 src key > dst key(例如:file4 > file3),说明目标端存在多余对象,可能需生成删除任务;随后目标端指针前移。 这种比较逻辑会持续进行,直到源端和目标端的所有 key 都被遍历完毕,从而构建出完整的任务队列。该策略的最大优势在于仅需线性扫描次数就能判断所有对象的状态,并快速生成任务。 02 性能优化 在理解了 Producer/Consumer 的职责之后,我们再看性能瓶颈主要出现在哪些环节以及如何优化。 producer 侧优化 在 Producer 执行过程中,对象存储的 list 操作可能成为性能瓶颈。大多数对象存储的 list 接口不支持通过 Range 来指定返回某个"区间"的结果,无法像分段下载那样将同一目录的 list 操作拆分为多个区间并行执行。因此,sync 的优化思路是:在单个目录内顺序执行 list,但在多个目录之间并发执行 list,并将各目录的结果汇总成完整的 key 集合。 从遍历方式上看,整个过程可以理解为:第一步在目录树上进行一次限定深度的"广度优先遍历",找到所有的子目录,实现目录层级拆分;第二步针对每个子目录进行全量遍历,列出该前缀下的所有对象,这一步要求 list 对象是有序的。 Consumer 侧优化 整个传输过程可以看作一条端到端的流水线:consumer 从源端读取数据,直接写入目标端,中间不经过本地磁盘。因此,源端读取或目标端写入的任何一侧速度瓶颈,都可能成为同步流程的瓶颈。 在上传过程中,sync 支持多任务并发执行,由多个 goroutine 分担不同的同步任务。从任务层面看,系统具备一定的并行传输能力,优化重点在于提升大文件的读写并发能力。 因此,sync 利用对象存储的 Multipart Upload 能力,将一个大文件拆为多个分块,由多个 goroutine 并行上传,最后再通过合并接口完成拼接。 对于超大文件,我们可以进一步对分块进行拆分:先上传若干中间对象,再利用 UploadPartCopy 接口,在对象存储端对这些中间对象进行二次分块与合并。这样对同一文件执行"两级分块 + 两次合并",能显著提高超大文件传输的并发度和效率。 与写入路径相比,读侧的并发逻辑相对简单:首先将对象按块切分,随后并发地读取每个块。这些并发读取的块构成一个"预读窗口",即在当前读取位置(offset)之前,尽量提前下载并缓存部分后续数据。通过预读机制,可以减少源端读取性能不足或网络抖动时的等待时间,避免读端成为传输链路的性能瓶颈。 03 集群模式 在数据规模更大、单机吞吐不足时,sync 还支持集群模式,通过将 Worker 横向扩展到多台机器上并行执行任务,以进一步提升整体同步效率。 需要强调的是,集群模式并没有引入新的同步算法,相对单机模式的变化主要体现在物理部署方式和任务分发通道的差异。 物理部署差异 在单机模式中,Producer 和 Consumer 运行在同一进程内,通过不同的 goroutine 协同工作;而在集群模式下,consumer 可独立部署到多台机器上作为 worker 节点,而 producer 作为 manager 节点从而实现横向扩展。 启用集群模式前,需要配置 manager 与各 worker 节点之间的 SSH 免密登录。启动集群模式后,manager 会将 juicefs 二进制分发到各 worker 节点的 /tmp 目录,并通过 SSH 在远程启动 worker 进程,加入同步任务。 任务分发机制差异 在单机模式中,producer 和 consumer 通过 Go 的 chan 在进程内传递任务;而在集群模式中,任务分发改为基于 HTTP 的方式------manager 提供任务分配 API,各 worker 通过轮询定期从 manager 拉取任务并执行。除了通信方式外,其余流程与单机模式一致。 04 任务过滤 在实际同步场景中,用户通常只希望对符合特定条件的对象执行同步或清理操作。Sync 支持在任务生成阶段从多个维度对对象进行筛选,并根据筛选结果决定是否生成任务及其类型。总体而言,过滤与调整主要包括以下几类: 基于时间:依据文件的 mtime 对 key 进行过滤; 基于大小:依据文件的 size 对 key 进行过滤; 基于 Key:通过路径/名称的模式匹配规则对 key 进行过滤; 基于结果:结合 key 在目标端的存在状态或差异情况进行过滤或任务类型调整。 其中,基于 Key 的过滤最常用也最灵活,Sync 通过 --exclude 和 --include 参数进行路径的模式匹配。以精确控制同步范围。 目前支持两种匹配模式:逐层过滤模式和完整路径过滤模式。逐层过滤兼容 rsync 的规则,但使用相对复杂,若有需要可以点击此处进一步了解。下文将重点介绍更直观易用的完整路径过滤模式。 自 v1.2.0 起,sync 命令新增 --match-full-path 选项,用于启用完整路径过滤模式。在该模式下,Sync 会将待匹配对象的完整路径依次与配置的多条规则进行匹配;一旦某条规则命中,即立即确定该对象的处理结果(同步或排除),后续规则不再参与匹配。 例如有一个路径为 a1/b1/c1.txt 的文件,以及 3 个匹配模式 --include 'a*.txt' --include 'c1.txt' --exclude 'c*.txt'。在完整路径过滤模式下,会直接将 a1/b1/c1.txt 这个字符串与匹配模式依次进行匹配。具体步骤为: 尝试将 a1/b1/c1.txt 与 --include 'a*.txt' 匹配,结果是不匹配。因为 * 不能匹配 / 字符,参见「匹配规则」; 尝试将 a1/b1/c1.txt 与 --inlude 'c1.txt' 匹配,此时根据匹配规则将会匹配成功。后续的 --exclude 'c*.txt' 虽然根据匹配规则也能匹配上,但是根据完整路径过滤模式的逻辑,一旦匹配上某个模式,后续的模式将不再尝试匹配。所以最终的匹配结果是「同步」。 以下是更多示例: --exclude '/foo**' 将排除所有根目录名为 foo 的文件或目录; --exclude '**foo/**' 将排除所有以 foo 结尾的目录; --include '*/' --include '*.c' --exclude '*' 将只包含所有目录和后缀名为 .c 的文件,除此之外的所有文件和目录都会被排除; --include 'foo/bar.c' --exclude '*' 将只包含 foo 目录和 foo/bar.c 文件。 05 数据完整性校验 在高并发传输之外,数据同步的关键是结果必须正确。为降低网络抖动、同步期间的并发写入,以及不同存储后端一致性语义差异所带来的风险,juicefs sync 提供了多级数据完整性校验机制,使用户能够根据业务需求在可靠性与资源开销之间进行权衡。 具体而言,Sync 在执行同步任务时支持不同强度的校验等级:校验越严格,对源端与目标端数据一致性的保障越强,但会引入更高的读放大和 CPU 消耗;校验越宽松,对性能影响越小,但对潜在不一致的容忍度也相应提高。用户可结合数据重要性与性能成本,选择适合的校验参数。 以校验强度最高的 check-all 为例,其流程可概括为以下三步: 传输前比对:在判定对象是否需要同步时,Sync 会读取源端与目标端的数据内容进行比较;若两端内容不一致,则生成并执行同步任务。 在极端场景中,可能需要读到最后一个字节才能确认不一致。此时,源端与目标端在传输前各发生一次全量读取,带来约 1 倍的额外读流量。 传输过程校验:执行同步时,源端数据会被再次完整读取并写入目标端,形成源端约 1 倍读流量与目标端约 1 倍写流量;同时,Sync 会在读取源端数据的过程中计算 checksum,并在读完后得到该对象的校验值。 传输后复核:为验证网络传输与目标端写入的正确性,Sync 会再读取一次目标端对象并计算 checksum,与传输过程中得到的 checksum 做对比;若不一致,则认为发生数据错误并报错。 check-new 可以视为 check-all 的子集:仅对新增或需要传输的对象执行上述内容校验,从而在较高可靠性与较低开销之间取得平衡。 check-change 则采用更弱的校验思路:不直接比对内容,而是通过 mtime 与 size 等元数据推断对象是否发生变化。由于该策略不验证真实内容,存在元数据未变但内容不一致的可能性,因此校验强度最低,但性能开销也最小。 本文系统介绍了 JuiceFS sync 的架构设计、性能优化、集群模式以及任务过滤机制,旨在帮助用户更深入理解其实现原理与使用方式。我们也将持续优化和演进 sync,欢迎大家提出反馈建议,或投稿分享实战经验。

优秀的个人博客,低调大师

IBM 发布 Granite-Docling-258M:开源企业级文档 AI 模型

IBM 正式发布了 Granite-Docling-258M,这是一个开源的视觉语言模型,专为端到端文档转换而设计。与传统的 OCR(光学字符识别)技术相比,Granite-Docling 注重保持文档的布局信息,能够有效提取表格、代码、公式、列表、标题等元素,并输出结构化的机器可读格式,而非简化的 Markdown 格式。 Granite-Docling 是 SmolDocling-256M 的改进版。IBM 对原有的技术架构进行了优化,采用了 Granite165M 语言模型,并升级了视觉编码器为 SigLIP2,同时保持了 Idefics3风格的连接器。 这一系列更新使得 Granite-Docling 的参数量达到了258M,并在布局分析、全页 OCR、代码、公式及表格的精确度上都有显著提升。此外,IBM 还解决了在预览模型中发现的不稳定性问题,如重复令牌循环现象。 Granite-Docling 采用了基于 Idefics3的架构,使用了 nanoVLM 训练框架。其输出的 DocTags 是 IBM 开发的一种标记语言,能够清晰地表示文档结构,包括元素、坐标和关系,方便后续工具将其转换为 Markdown、HTML 或 JSON 格式。这种结构化的输出方式,不仅保持了表格拓扑、数学公式、代码块及标题的顺序,还提高了数据索引的质量和增强了检索能力。 在多语言支持方面,Granite-Docling首次增加了对日语、阿拉伯语和中文的实验性支持,但目前以英语为主要目标。IBM 建议用户将 Granite-Docling 与 Docling 集成,利用其 CLI/SDK 自动转换 PDF、办公文档及图片至多种格式。这款模型能够在 Transformers、vLLM、ONNX 和 MLX 等运行环境中流畅运行,特别为 Apple Silicon 进行了优化。

优秀的个人博客,低调大师

🔥🔥🔥MakuBoot v4.2 发布,企业级低代码开发平台

介绍 maku-boot 是采用 SpringBoot3.3、SpringSecurity6.3、Mybatis-Plus、Flowable7.0、Vue3、Element-plus 等技术开发的低代码开发平台,旨在为开发者提供一个简洁、高效、可扩展的低代码开发平台。 使用门槛极低,支持国密加密、达梦数据库等,符合信创需求的低代码开发平台。 采用组件模式,扩展不同的业务功能,可以很方便的实现各种业务需求,且不会导致系统臃肿,若想使用某个组件,按需引入即可,反之亦然。 支持Online在线表单开发,支持单表、树表、一对一、一对多表单,可快速开发业务,无需部署及重启服务等。 支持多种数据库,包括 MySQL、PostgreSQL、达梦等,可灵活切换。 支持 Flowable7 工作流,包括流程设计、自定义表单、在线 Online 表单、会签、或签等。 支持多种登录方式,包括账号密码、短信验证码、企业微信、钉钉、飞书、微信等,可灵活选择。 支持多租户模式,可实现不同业务系统之间的隔离,能同时支持字段隔离、数据源隔离方式,满足对多租户的全部需求。 官网地址:https://maku.net 开发文档:https://maku.net/docs/maku-boot 演示环境:https://demo.maku.net/maku-boot 企业版:https://maku.net/price 更新日志 会员管理,新增租户ID 新增字典列表接口 字典管理,支持树形结构,可按层级划分 新增自定义树选择组件,可从字典或URL获取数据 升级 MakuGenerator 到 3.1.0 升级 SpringBoot 到 3.3.0 升级 Element-Plus 到 2.7.4 升级 Vite 到 5.2.12 开源汇总 低代码开发平台(单体版):https://gitee.com/makunet/maku-boot 低代码开发平台(微服务):https://gitee.com/makunet/maku-cloud 超好用的代码生成器:https://gitee.com/makunet/maku-generator Vue3.x 后台管理 UI:https://gitee.com/makunet/maku-admin Vue3.x 表单设计器:https://gitee.com/makunet/maku-form-design 架构图 效果图

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.8-2024 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.8-2024</version> </parent> ​ 本次更新内容 1. 重构代码生成器,采用类提取和字段提取两种方式,提取功能接口,方便后期扩展 2. 对数据字典注解增加字符串类型 3. 修改mybatis list大小不能处理各种数据库的问题 4. 重新编写项目代码结构规范,支持单应用和saas系统,saas采用域名和请求头租户识别。 5. 代码生成器增加feign类生成 6. 修改字段映射类生成方式 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 支持 jpa,mybatis-plus 等数据库 orm。内置一套访问数据的注解 DSL 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 项目最佳实践:https://gitee.com/quhaodian/nbsaas-mall2 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.7-2024 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.7-2024</version> </parent> 本次更新内容 1. 数据请求全面采用 json 格式数据提交,增加前端参数加密和后端响应加密功能。 2. 修改代码生成器,单个对象字段要是实体类,会抛出异常,需要进行相应的处理。 3. 修改后台vue3代码生成模板 4. 新增用户搜索注解 5. 新增系统判断,解决不能在mac系统代码生成的问题 6. 修改后台代码生成器模板代码 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 支持 jpa,mybatis-plus 等数据库 orm。内置一套访问数据的注解 DSL 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 项目最佳实践:https://gitee.com/quhaodian/nbsaas-mall2 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.6-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.6-2023</version> </parent> 本次更新内容 1. 数据请求全面从没用json格式数据提交,增加前端参数加密和后端响应加密功能。 2. 修改vue3代码生成模板 3. 增加@EncryptionData注解,放到参数上,后台认为请求需要加密,进行解密。放到方法头上,aes加密响应请求。 4. 增加 mybatis mapper文件夹生成Command 5. 增加数据库逻辑删除代码生成功能 6. 修改后台代码生成器模板代码 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 支持jpa,mybatis-plus等数据库orm。内置一套访问数据的注解DSL 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 项目最佳实践:https://gitee.com/quhaodian/nbsaas-mall2 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.4-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.4-2023</version> </parent> 本次更新内容 1. 增加@Dict@DictItem注解,方便字典类型数据显示 2. DataRequest对象重构成Request对象,SearchRequest对象重构成Search对象 3. 修改代码生成模块Request对象,SearchRequest对象相关模块 4. 增加PageExtResponse对象,方便列表数据增加其他属性。 5. 增加NeStrategy,支持ne查询。 6. 调整FilterGroup等类型,这样兼容dubbo3 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.3-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.3-2023</version> </parent> 本次更新内容 1. 升级 spring-boot 版本,升级shiro版本1.13.0 2. 增加SearchData注解,方便在搜索的适合通过aop进行数据拦截 3. 增加控制操作区域是否显示属性 4. 新增ExtResourceCommand ,处理生成代码的时候生成扩展模块文件夹。 5. 搜索模块支持or条件搜索。 6. 修改通过注解提取模型数据。 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.2-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.2-2023</version> </parent> 本次更新内容 1. 升级spring-boot版本 2. 增加统一异常处理类,方便在业务系统中统一处理异常返回结果 3. 增加租户统一请求对象基类 4. java8 兼容 caffeine cache 5. 修复el-select对象代码中数据请求url错误的问题。 6.修改java版本兼容问题,最低要求java8 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.0.18-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.0.18-2023</version> </parent> 本次更新内容 1. 修复部分操作不支持多层搜索功能,例如: @SearchBean(items = {@SearchItem(label = "文章分类", name = "categoryName", key = "article.catalog.name", operator = Operator.like)}) 2.优化了vue代码生成模板,支持element-plus中的tree选择,移除了以前的无效主题。 3. 修改了公共组件中的字典功能 4. 优化了 nbsaas-admin 中用户管理模块 5. 修改了vue3中的状态管理,解决页面跳转返回以后重置页面条件的问题 6. 增加数据权限控制相关注解 boot-nbsaas 具有以下特点: 自动建表:boot-nbsaas 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:boot-nbsaas 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:boot-nbsaas 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:boot-nbsaas 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.0.15-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.0.15-2023</version> </parent> 本次更新内容 1.后台模块增加shiro权限注解,前台添加菜单的时候需要配置权限标签,不然会报406错误 2.vue代码模板增加添加数据加载动画功能 3.修改了vue代码生成模板和jpa代码生成模板 4.优化了nbsaas-admin模块部分功能 5.增加基础功能模块 nbsaas-boot-starter,微信支付模块。基础功能引入pom就好了。 6.优化了nbsaas-admin-vue3视图页面 boot-nbsaas 具有以下特点: 自动建表:boot-nbsaas 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:boot-nbsaas 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:boot-nbsaas 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:boot-nbsaas 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册