From Spring Boot
Plan an incremental migration while preserving data, authorization, and API contracts.
Start with one workflow
Choose a bounded table or process. Record its schema, validation, authorization rules, side effects, API contract, and expected results. Create a QQQ Java 21 project with the correct Maven BOM, then reproduce that behavior using table metadata and actions.
Map the model
JPA entities and Spring annotations are not automatically converted into QQQ metadata. Define QTableMetaData and field/backend mappings, or use the QRecordEntity patterns. Keep schema changes explicit and test against representative data. See Building Tables.
Preserve integration contracts
Existing Spring controllers can remain during a gradual transition. Decide which service owns each route, transaction, and authentication boundary. Configure QQQ application APIs explicitly and compare their response shapes and permissions to the old contract.
Business services can be reused as Java code or called from BackendStep implementations. Framework coexistence alone does not establish dependency injection, transaction propagation, or shared authentication. Test those integrations deliberately.
Roll out
Run comparison tests, stage with a recoverable database copy, and move one workflow at a time. Maintain a rollback path for both application code and persistent data. Follow the 4.0 migration guide when upgrading an existing QQQ dependency as part of the change.