# Coisini **Repository Path**: jplv/coisini ## Basic Information - **Project Name**: Coisini - **Description**: Coisini 是一个基于 Spring Boot 2.x、MyBatis-Plus 和 Spring Security 构建的高效、简洁、易扩展的生产级后端脚手架。它集成了主流的开发组件,提供完善的认证授权机制,支持多数据库适配,旨在帮助开发者快速搭应用 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-10 - **Last Updated**: 2025-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Coisini Framework **Coisini** 是一个基于 Spring Boot 2.x、MyBatis-Plus 和 Spring Security 构建的高效、简洁、易扩展的生产级后端脚手架。它集成了主流的开发组件,提供完善的认证授权机制,支持多数据库适配,旨在帮助开发者快速搭应用。 --- ## 🛠️ 核心技术栈 | 组件 | 版本 | 说明 | | :--- | :--- | :--- | | **Spring Boot** | 2.6.6 | 核心框架 | | **Spring Security** | 5.x | 安全认证与授权 | | **MyBatis-Plus** | 3.5.3.1 | ORM 框架,提供强大的 CRUD 能力 | | **Redis** | 5.x+ | 缓存与 Token 存储 | | **JWT** | 0.11.5 | 无状态身份验证令牌 | | **Druid / HikariCP** | - | 数据库连接池 | | **Jackson** | 2.x | JSON 序列化与反序列化 | | **JDK** | 11 | 开发语言版本 | --- ## ✨ 主要特性 * **🔐 安全认证**:集成 Spring Security + JWT,实现无状态的统一认证与授权。支持动态权限校验(RBAC 模型)。 * **🗄️ 多数据库支持**:内置 MySQL、PostgreSQL、达梦 (Dameng) 数据库的适配配置,通过 Profile 轻松切换。 * **🚀 高效开发**: * 统一响应封装 (`R`) 与全局异常处理 (`GlobalExceptionHandler`)。 * MyBatis-Plus 自动填充 (`MyMetaObjectHandler`):自动维护创建人、创建时间、更新人、更新时间。 * 集成 `JsonUtils`、`SecurityUtils` 等常用工具类,减少重复造轮子。 * **🧩 模块化设计**:清晰的包结构,将业务逻辑 (`service/controller`) 与框架核心 (`framework`) 分离,便于维护和升级。 * **⚡ 性能优化**:集成 Redis 缓存,支持 Token 自动续期(无感刷新)。 --- ## 📂 项目结构 ```text org.junpeng.coisini ├── common // 通用模块 │ └── utils // 通用工具类 (JsonUtils, JwtUtils等) ├── constant // 常量定义 ├── controller // 控制层 (API 接口) ├── enums // 枚举定义 (ResultCode等) ├── framework // 框架核心模块 │ ├── config // 配置模块 (Redis, MyBatisPlus等) │ ├── generator // 代码生成模块 │ ├── log // 日志模块 │ ├── omni // 自定义对象转换工具 │ └── security // 安全模块 (登录用户、Token服务、权限服务等) ├── mapper // 数据访问层 (Mapper接口) ├── model // 数据模型 │ ├── po // 持久化对象 (对应数据库表) │ └── param // 入参对象 (如 LoginBody) ├── service // 业务逻辑层接口 │ └── impl // 业务逻辑层实现 └── CoisiniApplication // 启动类 ``` ### 项目中可能出现的警告 ```java WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.baomidou.mybatisplus.core.toolkit.SetAccessibleAction (file:/C:/Users/13982/.m2/repository/com/baomidou/mybatis-plus-core/3.5.3.1/mybatis-plus-core-3.5.3.1.jar) to field java.lang.invoke.SerializedLambda.capturingClass WARNING: Please consider reporting this to the maintainers of com.baomidou.mybatisplus.core.toolkit.SetAccessibleAction WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release ``` #### ⚠️ 警告原因分析 1. **背景**: 这个警告是由 Java 9 引入的 **模块化系统 (Project Jigsaw)** 引起的。为了提高安全性,Java 开始限制通过反射(Reflection)访问 JDK 内部的非公开 API。 2. **具体触发点**: * **组件**:MyBatis-Plus 的核心功能 `LambdaQueryWrapper`。 * **行为**:当使用 Lambda 表达式作为查询条件时,MyBatis-Plus 需要解析这个 Lambda 表达式以获取对应的**列名**。为了做到这一点,它通过反射访问了 `java.lang.invoke.SerializedLambda` 类中的私有字段 `capturingClass`。 * **冲突**:在 JDK 11 中,默认允许这种非法反射访问,但会打印这一条 `WARNING` 来提示你“这种操作在未来的 Java 版本(如 Java 16+)中可能会被默认禁止”。 ### 🛠️ 解决方案 既然项目可以正常运行,**这个警告目前在 JDK 11 下是无害的**,不会影响业务逻辑。但如果你想消除这个警告,有以下两种主要方式: #### 方法一:添加 JVM 启动参数(推荐) 这是最标准的解决方式,显式告诉 JVM 允许这种反射操作。 在你的 IDE(如 IntelliJ IDEA)的启动配置中,或者在 `java -jar` 命令中添加以下参数: ```bash --add-opens java.base/java.lang.invoke=ALL-UNNAMED ``` #### 方法二:忽略它 如果你只是在本地开发使用 JDK 11,且不想改动配置,完全可以忽略这个警告。它只会在服务启动且第一次使用 Lambda 查询时出现一次,之后不会重复刷屏。