# infpa **Repository Path**: libcsp/infpa ## Basic Information - **Project Name**: infpa - **Description**: infpa-java - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目定位 **infpa**(`cc.infpa`)是一个**基于 Spring Boot 4 的企业级应用开发底座(基础框架工程)**,核心思想一句话概括:*沉淀契约、抽象与规范,让业务模块只写业务*。 它不是一个具体的业务系统,而是一套"脚手架 + 扩展层"。业务模块基于它开发时,一个典型 CRUD 模块只需要:**实体、Mapper、请求、视图对象、契约接口 + Controller 实现**,其余能力(分页、转换、响应协议、事件、字典、序列化)全部由底座提供。 ## 技术栈 | 领域 | 选型 | | --- | --- | | 语言 | Java 26(`--enable-preview`,兼容 Kotlin / Scala / Groovy 混合开发) | | 框架 | Spring Boot 4.1.0 / Spring Framework 7.0.8 | | ORM | MyBatis-Flex 1.11.8 | | 序列化 | Jackson 2.22 / 3.2 | | 工具 | Guava 33.6.0-jre、Lombok 1.18.42、JSpecify 1.0.0 | | 构建 | Gradle 9.7.0 多模块 + Version Catalog(`libs.versions.toml`) | | 数据库 | H2(示例零配置)、MySQL 8/9、PostgreSQL、DB2、Derby、Hive(版本目录已内置) | | 混合语言 | Kotlin 2.4.10、Scala 3.8.4、Groovy 5.0.6 | ## 模块架构(16 个模块,分三层) ## 四大核心设计 ### 1️⃣ 声明式 API 契约 —— "一个接口既是服务端,也是客户端" ```java @HttpExchange(value = "sysUser") public interface ISysUserApi extends IApi { @GetExchange(value = "{id}") R getById(@PathVariable Long id); } ``` 用 Spring 6+ 的 `@HttpExchange` 声明接口契约,Controller 实现它作为服务端,同一接口还能直接生成 HTTP 客户端。CRUD 由业务 Controller 直接实现契约接口完成,底座不强制继承任何 Controller 基类。 ### 2️⃣ 实体 ↔ VO 自动转换 实体经 `SysUserConverter`(Guava `Converter`)转换为视图对象,配合 `FlexPage.getRecords(converter)`,分页结果一键转视图对象,无需手写循环。 ### 3️⃣ 统一响应协议 所有接口统一返回 `R` 结构,成功/失败由 `SuccessEnumerator` / `ErrorEnumerator` 枚举驱动: ```json { "code": "200", "message": "请求成功", "data": {} } ``` ## 快速使用 通过 Maven 引入聚合模块依赖: ```xml cc.infpa infra-all 1.0.2 ``` 创建启动类 `MainTest.java`: ```java package cc.test; import cc.infpa.autoconfigure.mybatis.flex.EnableMybatisFlex; import cc.infpa.mybatis.flex.annotation.MapperScanner; import cc.infpa.webmvc.annotation.SpringScanner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Import; @SpringBootApplication @EnableConfigurationProperties @EnableMybatisFlex @SpringScanner(basePackages = "cc.infpa") @MapperScanner(basePackages = "cc.infpa", filterPackages = "cc.infpa.**.mapper.*") @Import(H2InitProcessor.class) public class MainTest { static void main(String[] args) { SpringApplication.run(MainTest.class, args); } } ``` > 提示:启动类(`main` 方法所在类)应置于**业务包根**(如 `cc.test`),并让 `@SpringScanner` / `@MapperScanner` 的 `basePackages` 覆盖需要扫描的契约、Mapper 与组件所在包。 ## 工程化亮点 构建脚本(根 `build.gradle.kts`)相当有特色: - **自动语言检测**:`afterEvaluate` 中检测依赖自动应用 Kotlin/Scala/Groovy 插件,支持 JVM 多语言混合开发 - **统一编译参数**:javac/scalac/kotlinc 参数由 `buildSrc` + `conf.yml` 统一管理,分 dev/test/prod 环境 - **多环境运行时参数**:`env-dev.yml` / `env-test.yml` / `env-prod.yml` 按 `-DsystemProp.env` 切换 - **产物管理**:jar 统一输出至 `build/bin/`,yml 配置自动复制,支持 bootJar 全量包 - **Nexus 私服发布**:凭据与仓库源从配置文件读取,默认华为云/阿里云/腾讯云镜像 - **便捷任务**:内置 `git-reset`、`git-stash-*`、`open-build-file`、`env`、`conf` 等辅助任务 ## 总结 这是一个**个人/团队自用的企业级后端开发基座**,定位类似"精简版若依/JeecgBoot 的底座层":用 Spring Boot 4 + MyBatis-Flex + 契约抽象,把 CRUD 开发的重复劳动压缩到极致,同时用契约接口(`@HttpExchange`)打通服务端与客户端的调用语义。当前 `infra-system-*` 系列模块是演示这套能力的最小示例(用户管理),实际使用时应以此为模板新增业务模块。