Repository navigation
Feature/p0 starters - #4
Merged
Merged
Conversation
…mentation plans Researched public technical sources (Baeldung, spring.io, DZone, Java Code Geeks, Medium, GitHub, vendor docs) for the Spring Boot cross-cutting concerns teams most often reimplement, then mapped them against the eleven existing starters to find the gaps. Identifies ten candidate starters ranked by reinvention frequency, cross-cutting reach, and gap-vs-built-ins, with detailed implementation plans (config prefix, properties, beans/conditionals, dependencies, testing, effort, overlaps) for the P0/P1 tier — observability (correlation ID/MDC/structured logging), RFC 7807 problem-details, resilient HTTP client, secrets, data-privacy (PII masking + field encryption), and scheduler-lock — plus sketches for the rest and a sequencing plan. Linked from the README documentation index.
…tarters to roadmap
Adds a "Third-party integration starters (requested)" section with detailed
plans (config prefix, properties, beans/conditionals, dependencies, testing,
effort) for five requested SaaS integrations:
- twilio — SMS / WhatsApp / voice
- resend — transactional email
- onesignal — push / email / SMS / in-app (interpreted from "OpenSignal";
OpenSignal is a different, network-analytics company with no
notification API — flagged for confirmation)
- novu — multi-channel notification workflow orchestration
- supabase — BaaS: Auth (GoTrue), Storage, PostgREST data access
The four messaging providers are modeled as provider modules behind the
proposed `notifications` core SPI (same "common interface, swappable provider"
pattern used for StorageService across minio/aws-s3); Supabase is standalone.
Updated the candidates table, the notifications sketch, the delivery sequencing
(a parallel requested-integration track), and sources.
Implement the P0, P1, P2, and P3 tiers from ROADMAP.md as ten new Spring Boot starters, each with auto-configuration, typed @ConfigurationProperties, @ConditionalOnMissingBean overrides, unit tests, a module README, and a runnable example app. P0: - spring-boot-starter-observability — request correlation IDs (CorrelationIdFilter), MDC log propagation, async context propagation (MdcTaskDecorator), a CorrelationContext accessor, and an opt-in outbound CorrelationIdClientHttpRequestInterceptor. Bound from spring.observability.* - spring-boot-starter-problem-details — GlobalExceptionHandler rendering unhandled exceptions as RFC 7807 application/problem+json with a machine-readable code, per-field validation errors, request path, and optional correlation ID. Bound from spring.problem-details.* - spring-boot-starter-resilient-client — ResilientClient façade with auto-configured Resilience4j Retry and CircuitBreaker plus a timeout-configured RestClient. Bound from spring.resilient-client.* P1: - spring-boot-starter-data-privacy — MaskingService (email/card/full) and JPA field-level AES-256-GCM encryption via EncryptedStringConverter / AesGcmEncryptor. Bound from spring.data-privacy.* - spring-boot-starter-scheduler-lock — @SchedulerLock annotation and aspect so a @scheduled task runs on one instance only, with pluggable LockProvider (InMemoryLockProvider, Redis-backed RedisLockProvider). Bound from spring.scheduler-lock.* - spring-boot-starter-secrets — unified SecretSource SPI with EnvironmentSecretSource (default) and AwsSecretsManagerSecretSource selected via spring.secrets.provider. P2: - spring-boot-starter-notifications — core notification SPI: NotificationSender, NotificationMessage/NotificationResult, Channel enum, CompositeNotificationSender (routes by channel), LoggingNotificationSender fallback, and a NotificationService façade with sync/async dispatch. Bound from spring.notifications.* - spring-boot-starter-security-jwt — opinionated stateless JWT resource-server SecurityFilterChain with bearer auth, secure headers (HSTS, X-Content-Type-Options, X-Frame-Options), CORS, and a JwtDecoder from JWKS/issuer URI. Bound from spring.security-jwt.* - spring-boot-starter-webhooks — outbound delivery via WebhookDeliveryService with HMAC signing (WebhookSigner), exponentittering, plus an InMemoryWebhookRegistry. Bound from spring.webhooks.* P3: - spring-boot-starter-api-keys — issue/vaService (only hashes stored), pluggable ApiKeyStore, and an ApiKeyAuthFilter enforcing X-Api-Key on protected paths. Bound from spring.a Wire all modules and examples into settin(starter table + project tree), CHANGELOG (Unreleased/Added), and ARCHITECTURE (module topology table). Full build passes: unit tests, Jaless.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes
Type of change
Checklist
./gradlew spotlessCheckpasses locally./gradlew javadoccompiles without warnings[Unreleased]