Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save aureamunoz/148950f804abaed3a3be4da84985f47e to your computer and use it in GitHub Desktop.

Select an option

Save aureamunoz/148950f804abaed3a3be4da84985f47e to your computer and use it in GitHub Desktop.
Migration Skill Technology Coverage Matrix
| Decision Area | Current Option(s) in Skill | Alternate Options NOT Covered |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Migration Strategy** | Spring Compatibility (`quarkus-spring-*`), Full Quarkus (JAX-RS/CDI) | Hybrid (compat for some layers, full for others) |
| **Target Java Version** | Java 21+ (hard gate, blocks migration if < 21) | — |
| **Build System** | Maven (`pom.xml`), Gradle Groovy (`build.gradle`), Gradle Kotlin DSL (`build.gradle.kts`) | — |
| **REST Framework** | Full: RESTEasy (JAX-RS `@Path`), Compat: `quarkus-spring-web` (`@RestController`) | RESTEasy Reactive vs Classic not explicitly distinguished; no GraphQL option |
| **Dependency Injection** | Full: CDI/Arc (`@ApplicationScoped`, `@Inject`), Compat: `quarkus-spring-di` | — |
| **Persistence Strategy** | Full: Hibernate ORM with Panache (Active Record **and** Repository pattern), Compat: `quarkus-spring-data-jpa` | Standard Hibernate ORM without Panache (raw `EntityManager`); Panache with Kotlin; Reactive Hibernate |
| **Database** | H2, PostgreSQL, MySQL (JDBC drivers mapped) | MariaDB, Oracle, MS SQL, MongoDB (listed in dep-map but no config guidance) |
| **Database Migration** | Flyway (config mapped), Liquibase (dependency mapped) | Liquibase config properties not mapped in config-map |
| **Dev Services** | `%prod.` prefix pattern for datasource (auto DB in dev/test) | No explicit guidance on configuring specific Dev Services containers |
| **Naming Strategy** | `CamelCaseToUnderscoresNamingStrategy` workaround documented | — |
| **Web Views / Templates** | Thymeleaf → Qute (full syntax table, `@CheckedTemplate`, strict rendering) | JSP migration, JSF/MyFaces, Freemarker (only dependency listed), static SPA frontends |
| **Static Resources** | `static/` → `META-INF/resources/` | Webjars |
| **Security** | Full: `quarkus-security` + `quarkus-oidc`, Compat: `quarkus-spring-security` (limited SpEL) | LDAP, JWT (standalone), form-based auth config, RBAC details, Keycloak-specific setup |
| **CSRF** | Remove Spring CSRF tokens; mentions `quarkus-csrf-reactive` | No setup guidance for Quarkus CSRF |
| **Caching** | Full: `@CacheResult`/`@CacheInvalidate`, Compat: `quarkus-spring-cache` | Redis cache, Infinispan |
| **Scheduling** | Full: `@io.quarkus.scheduler.Scheduled`, Compat: `quarkus-spring-scheduled` | Quartz (dependency mapped but no migration guide) |
| **Configuration** | Full: `@ConfigMapping`, Compat: `quarkus-spring-boot-properties` (`@ConfigurationProperties`) | MicroProfile Config, `@ConfigProperties` |
| **Messaging** | Dependencies mapped: AMQP (`quarkus-smallrye-reactive-messaging-amqp`), Kafka (`quarkus-smallrye-reactive-messaging-kafka`) | No code migration guide for messaging; no JMS/Artemis; no RabbitMQ specific |
| **Observability** | Actuator → `quarkus-smallrye-health` + `quarkus-micrometer`; config mapped; `quarkus-opentelemetry` in dep-map | No migration guide for custom health checks, custom metrics, tracing setup |
| **Logging** | Config mapped: `logging.level.*` → `quarkus.log.category`, file logging, console format | Structured JSON logging (`quarkus-logging-json` listed but not guided), MDC, custom log handlers |
| **Profiles** | `application-{profile}.properties` → `%profile.` prefix; `@Profile` → `@IfBuildProfile` | Multi-profile strategies, `@UnlessBuildProfile`, runtime profile config |
| **Testing** | `@SpringBootTest` → `@QuarkusTest`, `@MockBean` → `@InjectMock`, `TestRestTemplate` → REST Assured, `@ActiveProfiles` → `@TestProfile` | `@QuarkusIntegrationTest` (native), Testcontainers, `@QuarkusTestResource`, continuous testing |
| **Application Lifecycle** | `CommandLineRunner` → `@QuarkusMain` / `@Observes StartupEvent`, `ApplicationRunner` → `@QuarkusMain`, CLI → Picocli `@TopCommand` | Graceful shutdown, `ShutdownEvent`, lifecycle priorities |
| **Spring Data REST** | Compat: `quarkus-spring-data-rest` (`@RepositoryRestResource`) | Full migration alternative (manual REST endpoints) |
| **Spring Cloud Config** | Compat: `quarkus-spring-cloud-config-client` (config mapped) | Consul, Vault, Kubernetes ConfigMaps |
| **CORS** | `@CrossOrigin` → `quarkus.http.cors.*` properties | — |
| **Container / Native** | Maven `native` profile added; Gradle native via `-Dquarkus.native.enabled=true` | Dockerfile generation, Jib, container image extensions (`quarkus-container-image-docker`, `quarkus-container-image-jib`) |
| **Batch Processing** | Not covered | Custom with Quarkus Scheduler, JBeret, skip/manual |
| **Reactive** | Not covered (Spring WebFlux → `quarkus-rest` mentioned in dep-map only) | Mutiny, RESTEasy Reactive pipelines, Reactive Hibernate, reactive messaging patterns |
| **OpenAPI / Swagger** | Not covered | `quarkus-smallrye-openapi` |
| **GraphQL** | Not covered | `quarkus-smallrye-graphql` |
| **gRPC** | Not covered | `quarkus-grpc` |
| **WebSocket** | Not covered | `quarkus-websockets-next` |
| **Email** | Not covered | `quarkus-mailer` |
| **Fault Tolerance** | Not covered | `quarkus-smallrye-fault-tolerance` (retries, circuit breakers, timeouts) |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment