Skip to content

Upgrade from Java 11 to Java 21 with Spring Boot 3.2.5#600

Open
devin-ai-integration[bot] wants to merge 7 commits into
masterfrom
devin/1779135254-java21-upgrade
Open

Upgrade from Java 11 to Java 21 with Spring Boot 3.2.5#600
devin-ai-integration[bot] wants to merge 7 commits into
masterfrom
devin/1779135254-java21-upgrade

Conversation

@devin-ai-integration
Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration Bot commented May 18, 2026

Summary

Major upgrade from Java 11 / Spring Boot 2.6.3 to Java 21 / Spring Boot 3.2.5, including all required dependency updates and namespace migrations.

Build & Infrastructure

  • Java: 11 → 21 (source/target compatibility)
  • Spring Boot: 2.6.3 → 3.2.5
  • Gradle wrapper: 7.4 → 8.7
  • io.spring.dependency-management: 1.0.11.RELEASE → 1.1.5
  • CI workflow: Updated to Java 21, actions/checkout@v4, setup-java@v4, cache@v4

Dependency Upgrades

  • MyBatis Spring Boot Starter: 2.2.2 → 3.0.3
  • DGS Framework: 4.9.21 → 8.5.0 (codegen 5.0.6 → 6.2.1, starter changed to graphql-dgs-spring-graphql-starter)
  • JJWT: 0.11.2 → 0.12.5
  • SQLite JDBC: 3.36.0.3 → 3.45.3.0
  • Joda-Time: 2.10.13 → 2.12.7
  • Rest-Assured: 4.5.1 → 5.4.0
  • Spotless: 6.2.1 → 6.25.0

Code Migrations

  • javax.*jakarta.*: All javax.validation, javax.servlet imports migrated to jakarta namespace (21 files)
  • Spring Security: Removed WebSecurityConfigurerAdapter (deleted in Spring Security 6), refactored to SecurityFilterChain bean with lambda-style DSL. Replaced antMatchers() with requestMatchers()
  • ResponseEntityExceptionHandler: Updated handleMethodArgumentNotValid signature (HttpStatusHttpStatusCode)
  • DGS DataFetcherExceptionHandler: Updated to handleException() returning CompletableFuture<DataFetcherExceptionHandlerResult>
  • DGS PageInfo: Migrated from graphql.relay.DefaultPageInfo to DGS-generated io.spring.graphql.types.PageInfo
  • JJWT 0.12.x API: Updated builder/parser methods (setSubjectsubject, setExpirationexpiration, parserBuilderparser, parseClaimsJwsparseSignedClaims, getBodygetPayload). Used Keys.hmacShaKeyFor() for key construction
  • Spring GraphQL: Added spring.graphql.schema.inspection.enabled=false to prevent conflict with DGS schema management

Review & Testing Checklist for Human

  • Verify ./gradlew clean test passes locally with JDK 21
  • Verify ./gradlew bootRun starts successfully and curl http://localhost:8080/tags returns a response
  • Test the GraphQL endpoint at /graphql to ensure DGS integration works correctly
  • Verify JWT authentication flow (register user, login, access protected endpoints)
  • Check that the security configuration correctly permits/denies the expected endpoints

Notes

  • javax.crypto.* imports were intentionally NOT migrated — they are JDK standard library, not Jakarta EE
  • The JWT secret key in application.properties is 88 characters which is sufficient for HMAC-SHA384+ with the new Keys.hmacShaKeyFor() approach
  • All 68 existing tests pass with these changes

Link to Devin session: https://app.devin.ai/sessions/4d070c54bd064885b3eaaeef992d699a
Requested by: @davidbean-hash


Devin Review

Status Commit
⚪ Not started

Run Devin Review

💡 Connect your GitHub account to enable automatic code reviews.

Open in Devin Review (Staging)
Open in Devin Review

gardnerjohnson-creator and others added 7 commits August 26, 2025 01:47
- Added a simple note confirming RealWorld API spec compliance
- This is a test change to verify PR workflow functionality

Co-Authored-By: Gardner Johnson <gardnerjohnson@gmail.com>
…st-dummy-change

Test: Add testing verification note to README
- Modern React 18 frontend with TypeScript and Tailwind CSS
- Complete RealWorld specification implementation
- User authentication with JWT token management
- Article management (create, view, edit, delete)
- Article feed with pagination
- User profiles and following functionality
- Comments system for articles
- Social features (favorites, following)
- Tag-based article categorization
- Responsive design with modern UI
- Full API integration with Spring Boot backend
- Development server on localhost:3000
- Production build support

Features implemented:
- User registration and login
- Article creation and editing with markdown support
- Global article feed
- User profiles and social following
- Comment system
- Article favoriting
- Tag filtering
- JWT authentication integration
- Error handling and validation
- Modern responsive UI design

The frontend successfully demonstrates all backend API functionality
through a visual web interface, replacing raw JSON responses with
a complete social blogging platform user experience.

Co-Authored-By: Gardner Johnson <gardnerjohnson@gmail.com>
- Remove node_modules from git tracking and add to .gitignore
- Configure environment variables for API base URL using VITE_API_BASE_URL
- Add TypeScript definitions for Vite environment variables
- Remove unused 'User' import to fix TypeScript error

Addresses the 5 critical issues identified in PR review:
1. ✅ Remove node_modules from git (added to .gitignore)
2. 🔄 Test complete user journey (next step)
3. ✅ Configure environment variables (VITE_API_BASE_URL)
4. 🔄 Verify CORS configuration (next step)
5. 🔄 Test authentication flow thoroughly (next step)

Co-Authored-By: Gardner Johnson <gardnerjohnson@gmail.com>
…d-react-frontend

Add React Frontend Application for RealWorld API
- Update Java source/target compatibility from 11 to 21
- Upgrade Spring Boot from 2.6.3 to 3.2.5
- Upgrade io.spring.dependency-management from 1.0.11.RELEASE to 1.1.5
- Upgrade Gradle wrapper from 7.4 to 8.7
- Upgrade DGS framework from 4.9.21 to 8.5.0 (with codegen 6.2.1)
- Upgrade Spotless plugin from 6.2.1 to 6.25.0
- Upgrade MyBatis Spring Boot starter from 2.2.2 to 3.0.3
- Upgrade JJWT from 0.11.2 to 0.12.5
- Upgrade Joda-Time from 2.10.13 to 2.12.7
- Upgrade SQLite JDBC from 3.36.0.3 to 3.45.3.0
- Upgrade Rest-Assured from 4.5.1 to 5.4.0
- Migrate all javax.* imports to jakarta.* (validation, servlet)
- Refactor WebSecurityConfig: replace WebSecurityConfigurerAdapter with SecurityFilterChain bean
- Update security DSL to use lambda-style configuration
- Replace antMatchers() with requestMatchers() (Spring Security 6)
- Update CustomizeExceptionHandler to use HttpStatusCode (Spring 6)
- Update GraphQL exception handler for new DataFetcherExceptionHandler API
- Update DGS PageInfo usage from graphql-relay to generated types
- Update JJWT API calls for 0.12.x (builder/parser changes)
- Use Keys.hmacShaKeyFor() for HMAC key construction
- Disable Spring GraphQL schema inspection (DGS manages schema)
- Update CI workflow: Java 21, actions/checkout@v4, setup-java@v4, cache@v4

Co-Authored-By: david.bean <david.bean@cognition.ai>
@devin-ai-integration
Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

Copy link
Copy Markdown
Author

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant