Skip to content
CAI
Software that uses CAICheck a score

codingapi/springboot-framework

42.6

Weak · 22 September 2026

18.1k

lines of production code

Java

with TypeScript, JavaScript

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Spring Boot-based framework and application suite that provides foundational utilities for building enterprise Java services. It includes a core starter with domain event handling, cryptography, and dynamic class loading, alongside specialized modules for dynamic data access, runtime SQL generation, and row/column-level data authorization. The platform also features a security starter for JWT/Redis authentication and a scripting module for executing Groovy scripts as REST endpoints, all supporting a modernized frontend architecture using pnpm and Module Federation.

How it got here

2021–2022 — Spring Boot 3 migration and framework expansion

20 changes.

The project upgraded its core infrastructure to Spring Boot 3.3 and JDK 17, restructuring the frontend and cleaning up obsolete configuration artifacts. This period focused on developing the springboot-starter framework with domain-driven event handling, dynamic loading, and cryptographic utilities, alongside a data-fast module for runtime MVC mapping. Comprehensive test coverage was added across the starter, data-authorization, and utility modules to ensure stability during the transition.

2023–2025 — Dynamic data access and security modules

18 changes.

This period focused on expanding the framework with new starters for security, data authorization, and dynamic data access. Key features included runtime JPA entity generation, dynamic SQL building, and Groovy-based script execution for REST endpoints. The work also established a complete user management example application to demonstrate these capabilities.

2026 — Groovy scripting and frontend micro-frontend migration

6 changes.

This period focused on introducing a new Spring Boot starter for dynamic Groovy script execution, complete with comprehensive unit tests for its runtime, caching, and repository components. Simultaneously, the frontend applications were restructured into a pnpm workspace using RsBuild and Module Federation to enable micro-frontend capabilities, alongside expanded test coverage for framework entities and reflection utilities.

Features

Add MapViewResult and QueryColumns for JPA map-based query support

The JPA map module now includes new classes to facilitate map-based query results and column management. MapViewResult provides a specialized HashMap implementation with constructors accepting up to 47 key-value pairs, designed to handle multi-column query results. QueryColumns and QueryColumnsContext introduce a builder pattern for defining SQL column selections, including logic to extract column aliases from SQL strings (handling 'as', 'AS', and dot notation) and a singleton cache to manage column definitions.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/map · high confidence

Added example API controllers and admin initialization runner

The example-interface module now includes REST controllers for user management and error handling, exposing endpoints for creating/updating users (/api/cmd/user/save), removing users (/api/cmd/user/remove), listing users (/api/query/user/list), and testing error responses (/open/error/\*). Additionally, a UserRunner service has been added to automatically initialize an admin user when the application starts.

example/example-interface · high confidence

A new UserQueryService has been introduced in the example-app-query module to handle user data retrieval. This service exposes a list method that accepts a SearchRequest and returns a paginated result of UserEntity objects, leveraging the underlying JPA repository for data access.

example/example-app/example-app-query · high confidence

Dynamic JPA entity generation with metadata-driven annotations

The metadata module now introduces a system for dynamically building JPA entity classes at runtime. The new TableEntityMetadata class serves as the data model, capturing table details (name, schema, catalog, comment) and column definitions (type, primary key status, generation strategy, nullability, uniqueness, and custom annotations). The TableEntityClassBuilder uses this metadata, along with ByteBuddy, to generate actual Java classes annotated with standard JPA annotations like @Entity, @Table, @Id, @GeneratedValue, and @Column, allowing the application to interact with database tables without pre-compiled entity classes.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata · high confidence

Dynamic MVC mapping registration via Spring Boot starter

The data-fast module now provides a Spring Boot auto-configuration that registers components for dynamically adding and removing MVC URL mappings at runtime. This includes a configuration class that wires a mapping register, an entity manager initializer, and a script mapping register, allowing applications to programmatically control request handlers without traditional controller classes.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast · high confidence

Initial JPA persistence and Spring Security implementation for user management

This change introduces the concrete infrastructure layer for user data storage and authentication. It adds JPA entity definitions (UserEntity, TestEntity) and corresponding Spring Data repositories (UserEntityRepository, TestEntityRepository) to handle database operations. A UserConvertor is provided to map between domain models and database entities, while UserRepositoryImpl implements the user repository interface using these JPA components. Additionally, Spring Security integration is established via PasswordEncoderImpl (wrapping BCrypt) and UserDetailServiceImpl to load user details for authentication.

example/example-infra/example-infra-jpa · high confidence

Introduce Spring Boot Starter for dynamic Groovy script execution

This change adds the \springboot-starter-script\ module, enabling the runtime execution of Groovy scripts within Spring Boot applications. It provides a REST API (\/api/groovy-script\) for compiling, saving, and retrieving scripts, along with a caching layer and a repository abstraction for script persistence. The starter includes an auto-configuration that initializes the script engine, manages temporary script lifecycles (with configurable expiration), and supports transaction modes (default, commit, readonly) for script execution.

springboot-starter-script/src/main · high confidence

Introduce Spring Boot starter for data authorization

This change adds the \springboot-starter-data-authorization\ module, which provides a Spring Boot auto-configuration for data-level security. It introduces a SQL interceptor that enhances queries to enforce row-level permissions (injecting conditions into WHERE clauses and JOINs) and column-level permissions (filtering values in the result set). The starter includes configuration properties, a context for managing authorization filters, and handlers for resolving table and column aliases, including support for derived tables and UNION ALL operations.

springboot-starter-data-authorization/src/main · high confidence

Introduce dynamic script execution with HTTP mapping support

The \springboot-starter-data-fast\ module now includes a new scripting subsystem that allows users to define dynamic HTTP endpoints via Groovy scripts. This change adds \FastScriptMappingRegister\ to handle mapping and unmapping of script-based URLs, \ScriptMapping\ and \ScriptMethod\ to define endpoint details and HTTP methods (GET/POST), and \ScriptRuntime\ to execute scripts with injected context objects like \$request\, \$jpa\, and \$jdbc\. Users can now expose dynamic logic as REST endpoints without writing traditional Java controllers.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/script · high confidence

Introduces CodingApi SpringBoot-Starter framework with domain events, dynamic loading, and crypto utilities

The springboot-starter module now provides a foundational framework for Spring Boot applications, featuring automatic configuration that registers framework properties and prints a startup banner. It introduces a domain-driven design layer with annotations (MetaTable, MetaColumn) for entity metadata, a proxy-based change interceptor that automatically publishes domain events (create, persist, delete, field change) for tracked entities, and a dynamic application loader capable of scanning a local directory for JARs to load at runtime. The starter also includes a comprehensive set of cryptographic utilities (AES, DES, RSA, HmacSHA256, SHA256) with BouncyCastle support, request handling DTOs (PageRequest, SearchRequest, Filter) for pagination and filtering, and utility classes for bean conversion and command execution.

springboot-starter/src/main · high confidence

Introduces user management domain and command handling

The application now includes a dedicated user domain and command infrastructure. The \example-domain-user\ module defines the core user entity, metrics, password encoding gateway, repository interface, and a service that handles user creation, updates, deletion, and automatic admin initialization. The \example-app-cmd-domain\ module wires these components via Spring configuration and exposes a router that accepts user commands to create, update, or remove users, translating requests into domain service calls.

example/example-app/example-app-cmd-domain, example/example-domain/example-domain-user · high confidence

New DynamicTableGenerator for runtime DDL generation

The springboot-starter-data-fast module now includes a DynamicTableGenerator class that allows users to programmatically generate SQL DDL statements (create, drop, and alter table) from JPA entity classes at runtime. This new component leverages Hibernate's internal schema management tools to produce executable SQL scripts or raw DDL strings based on entity metadata, enabling dynamic database schema manipulation without relying on static migration files.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/generator · high confidence

New Spring Boot Security starter with JWT and Redis token management

This release introduces a new security module that provides automatic configuration for Spring Security, including login, logout, and token-based authentication. It supports two token storage strategies: JWT (enabled via \codingapi.security.jwt.enable=true\) and Redis (enabled via \codingapi.security.redis.enable=true\), with configurable URLs for login, logout, and ignored paths. The starter includes AES encryption for sensitive data, customizable HTTP security rules (CSRF, CORS, Basic Auth, Frame Options), and extensible hooks via \SecurityLoginHandler\ and \HttpSecurityCustomer\ interfaces for pre/post-login processing and custom security configurations.

springboot-starter-security/src/main · high confidence

New dynamic SQL query builder and execution support

The JPA module now includes a new \SQLBuilder\ class that allows users to construct dynamic SQL queries with parameter binding and automatic count query generation. A new \JpaQuery\ service is provided to execute these dynamic queries, supporting both list and paginated results, as well as map-based result sets via \MapViewResult\. The \JpaQueryConfiguration\ registers these components as Spring beans, and \JpaQueryContextRegister\ ensures the query service is available in the context for use.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa · high confidence

New dynamic query and sorting repository interfaces

The repository package introduces several new interfaces to enhance data access capabilities. FastRepository provides a unified interface that automatically switches between Spring Data Example queries for simple equality filters and dynamic HQL generation for complex conditions (LIKE, ranges, IN, OR/AND). DynamicRepository and DynamicNativeRepository add support for executing custom SQL and JPQL queries with pagination and map-based results via SQLBuilder. Additionally, SortRepository offers a reSort method to automatically re-index sort orders for entities implementing ISort.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository · high confidence

Removals

Removal of empty auto-configuration class and properties file

The empty AutoConfiguration class and the empty application.properties file in the springboot-framework module have been removed. This cleanup eliminates unused configuration artifacts that previously had no functional impact on the application.

springboot-framework · high confidence

Behavioural changes

Added Spring Boot auto-configuration metadata

The starter now includes the necessary metadata files to enable automatic configuration in Spring Boot 3.x. Specifically, it adds the \spring.factories\ file and the new \AutoConfiguration.imports\ file, which register \DataFastConfiguration\, \JpaQueryConfiguration\, and \JdbcQueryConfiguration\ so that the fast-data features are automatically applied without manual setup.

springboot-starter-data-fast/src/main/resources · high confidence

Example server relocated and configured with H2 database

The example server has been moved to a new location (example/example-server) and renamed to ServerApplication. It now defaults to an embedded H2 database for local development, with MySQL configuration commented out, and includes basic internationalization messages for error handling.

example/example-server · high confidence

Global EntityManager context for JPA operations

The library now maintains a global reference to the JPA EntityManager, allowing components to access it without explicit injection. EntityManagerInitializer registers the application's EntityManager during startup, and EntityManagerContent provides methods to push this instance and detach entities, enabling global access to persistence context management.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/manager · high confidence

Introduce JdbcQuery for SQLBuilder-based database access

The JDBC module now provides a new \JdbcQuery\ service that executes SQL statements built via \SQLBuilder\, supporting list, map, and paginated results. This change fixes two specific defects: the \CamelCaseRowMapper\ now explicitly specifies an underscore separator to ensure correct column-name-to-key conversion, and the internal count-query logic now correctly copies all parameters when the parameter count matches the placeholder count, preventing lost bindings. The query service is registered as a Spring bean and made available via a static context for use by other components.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jdbc · high confidence

Mobile and PC apps restructured as pnpm workspace apps with RsBuild and Module Federation

The mobile and PC frontend applications have been reorganized into a pnpm workspace structure, replacing the previous standalone setup. Both apps now utilize RsBuild as the build tool and are configured with Module Federation to support micro-frontend capabilities, including dynamic component loading and shared dependencies like React 18.3.1. The mobile app includes features for user authentication, form handling, and micro-frontend integration, while the PC app adds support for the Monaco Editor and access control panels. Development and mock server configurations have been standardized across both apps, and deployment scripts have been updated to work with the new workspace structure.

frontend/apps/mobile, frontend/apps/pc, frontend/packages/shared · high confidence

Removal of application.properties configuration file

The application.properties file in the springboot-example module has been deleted. This removes any configuration settings previously defined in this file, which may affect how the example application initializes or connects to external services.

springboot-example · high confidence

Fixes

Fix DynamicTableClassLoader context binding bug

Resolved a bug in the DynamicTableClassLoader where the thread's context class loader was not consistently updated after registering or cleaning dynamic classes. This ensures that dynamic table classes are correctly resolved and bound within the current thread's execution context, preventing potential class-loading failures or stale references when interacting with dynamically generated table schemas.

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/classloader · high confidence

Test coverage

Added comprehensive unit tests for the Spring Boot Data Authorization starter; Added test configuration and message resources; Added test configuration for H2 database integration tests; Added test entity for framework entity testing; Added test handler implementations for domain and custom events; Added test infrastructure for event transaction support; Added tests for ObjectAnnotationFieldUtils reflection behavior; Added tests for Spring Data JPA repository query capabilities; Added tests for the event framework; Added unit tests for EventException and LocaleMessageException; Added unit tests for GroovyScript runtime, caching, and repository components; Added unit tests for RestClient, SessionClient, and HttpRequest; Added unit tests for TriggerContext handler management; Added unit tests for crypto utilities; Added unit tests for domain model serialization, conversion, and proxy lifecycle; Added unit tests for framework DTO response classes; Added unit tests for framework application startup, event transactions, and HTTP endpoints; Added unit tests for framework utility classes; Added unit tests for request DTOs and filter logic.

Dependencies

Migrate to Spring Boot 3.3 and JDK 17 with updated dependency versions

The project has been upgraded from Spring Boot 2.5.4 (JDK 11) to Spring Boot 3.3.5 (JDK 17). This change includes updating the parent POM to use the new Spring Boot parent, upgrading the Java version to 17, and updating various dependencies such as Fastjson to 2.0.53, JJWT to 0.12.6, and SnakeYAML to 2.2. The frontend has also been restructured into a pnpm workspace with updated dependencies for React, Ant Design, and build tools.

(dependencies) · high confidence

Housekeeping

Whitespace formatting applied to Maven Wrapper downloader

The Maven Wrapper downloader script has been reformatted to adhere to standard whitespace conventions, specifically adding spaces after \if\ keywords and adjusting indentation for string concatenation. This change improves code readability and consistency but does not alter the functional behavior of the wrapper.

.mvn · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 36 → 43 (+6.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 65 → 65 (+0.7)
  • Architecture 92 → 94 (+2.0)
  • Maturity 77 → 72 (-4.9)
  • Readiness 16 → 27 (+11.1)
  • Security 70 → 59 (-10.6)
  • Domain Modelling 70 → 60 (-10.5)
  • Accessibility 36 → 47 (+11.2)

Resolved (51)

  • Change coupling: AutoConfiguration.java ↔ MyLoginFilter.java (springboot-starter-security/src/main/java/com/codingapi/springboot/security/AutoConfiguration.java)
  • Change coupling: FlowApprovalEvent.java ↔ FlowService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/event/FlowApprovalEvent.java)
  • Change coupling: FlowDirectionService.java ↔ FlowNodeService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/FlowDirectionService.java)
  • Change coupling: FlowDirectionService.java ↔ FlowService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/FlowDirectionService.java)
  • Change coupling: FlowNode.java ↔ FlowRecordRepository.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/domain/FlowNode.java)
  • Change coupling: FlowNode.java ↔ FlowService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/domain/FlowNode.java)
  • Change coupling: FlowNodeService.java ↔ FlowService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/FlowNodeService.java)
  • Change coupling: FlowRecord.java ↔ FlowService.java (springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java)
  • Change coupling: HttpClient.java ↔ RestClient.java (springboot-starter/src/main/java/com/codingapi/springboot/framework/rest/HttpClient.java)
  • Change coupling: IHandler.java ↔ SpringEventHandler.java (springboot-starter/src/main/java/com/codingapi/springboot/framework/event/IHandler.java)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (example/example-infra/example-infra-flow/src/main/java/com/codingapi/example/infra/flow/repository/FlowWorkRepositoryImpl.java)
  • Duplicated block (10 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/rest/HttpRequest.java)
  • Duplicated block (10 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/rest/RestClient.java)
  • Duplicated block (11 lines × 2) (springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicSQLBuilder.java)
  • Duplicated block (11 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/event/SpringDefaultEventHandler.java)
  • Duplicated block (12 lines × 2) (springboot-starter-script/src/main/java/com/codingapi/springboot/script/GroovyScriptRuntime.java)
  • Duplicated block (5 lines × 2) (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/enhancer/TableColumnAliasHolder.java)
  • Duplicated block (5 lines × 2) (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/jdbc/proxy/ResultSetProxy.java)
  • …and 31 more

New (85)

  • ClassTooLong: CallableStatementProxy (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/jdbc/proxy/CallableStatementProxy.java)
  • ClassTooLong: MapViewResult (springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/map/MapViewResult.java)
  • ClassTooLong: ResultSetProxy (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/jdbc/proxy/ResultSetProxy.java)
  • Coverage not measured — JavaScript/TypeScript suite
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (docs/wiki/springboot-starter-data-authorization.md)
  • Documentation: no project overview (docs/wiki/home.md)
  • Documentation: no usage examples (README.md)
  • Documentation: written for insiders (docs/capabilities/springboot-starter/rest-client.md)
  • Documentation: written for insiders (docs/capabilities/springboot/data-jpa.md)
  • Duplicated block (10 lines × 2) (springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/metadata/TableEntityMetadata.java)
  • Duplicated block (10 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/rest/RestClient.java)
  • Duplicated block (11 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/rest/HttpRequest.java)
  • Duplicated block (13–14 lines × 2) (springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicSQLBuilder.java)
  • Duplicated block (18 lines × 2) (springboot-starter-script/src/main/java/com/codingapi/springboot/script/GroovyScriptRuntime.java)
  • Duplicated block (20 lines × 2) (springboot-starter/src/main/java/com/codingapi/springboot/framework/event/SpringDefaultEventHandler.java)
  • Duplicated block (28 lines × 2) (springboot-starter-security/src/main/java/com/codingapi/springboot/security/filter/MyAccessDeniedHandler.java)
  • Duplicated block (5 lines × 2) (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/enhancer/TableColumnAliasHolder.java)
  • Duplicated block (5 lines × 2) (springboot-starter-data-authorization/src/main/java/com/codingapi/springboot/authorization/jdbc/proxy/ResultSetProxy.java)
  • …and 65 more

Changes since last survey

  • 17 commits — 11 feature/other, 6 fixes

By area

  • (repo) — 4 commits
  • (root) — 4 commits
  • springboot-starter-data-fast/src — 2 commits
  • .github/workflows — 1 commit
  • docs/agents — 1 commit
  • example/example-app — 1 commit
  • frontend/apps — 1 commit
  • springboot-starter-data-authorization/src — 1 commit
  • springboot-starter-script/src — 1 commit
  • springboot-starter-security/src — 1 commit

Notable commits

  • fix: fix: RestClientTest 外部网络依赖用例改为环境自适应,升级 Actions 至 v5
  • fix: fix: 修复 Groovy 元数据策略跨测试类泄漏导致的 CI 失败
  • fix: fix: 修复 data-fast 测试跨类数据泄漏导致的 CI 外键约束失败
  • fix: fix: 修复临时脚本线程泄漏(OOM 根因)并升级版本至 3.4.55
  • fix: fix: 修复数据查询与请求解析的 6 个框架缺陷
  • fix: fix: 分页包装SQL的结果列无法解析物理表字段导致列权限失效
  • change: Merge pull request #209 from codingapi/dev
  • change: Merge pull request #210 from codingapi/17.3.x
  • change: Merge pull request #211 from codingapi/17.3.x
  • change: Merge pull request #213 from codingapi/17.3.x
  • change: ci: CI 迁移至 GitHub Actions,接入 Codecov 覆盖率上传
  • change: docs: README 改为双版本线简介,文档全面对齐实际代码
  • change: docs: 新增 DDD 观点文章中英文版本并在 README 引用分享
  • change: docs: 调整 README 结构,DDD 观点分享移至版本说明之前
  • change: refactor: 移除流程引擎模块、前端合并为 pnpm workspace、版本机制改为 CI-Friendly
  • change: test: 大幅提升单元测试覆盖率(行覆盖 45% → 90%)
  • change: update deploy remark

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

codingapi/springboot-framework was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit e340e59089becdb23363a5adf472f1a60200b480 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-90d5d2fe38ee.