In progress:
- Measure performance difference between AOP, BPP(CGLib, DynamicProxy), Micrometer Timed and native
- play with the openrewrite library
TODO:
- add kafka-gitops approach to create topics and acl kafka-gitops
- use the best-practise for topic name convention dev.io
- Kafka ssl via SslBundles
- spring web via https with self-signed certificate
- QueryDSL or jooq
- retryable schema registry (it should be on the main source soon confluentinc/schema-registry#3424)
- id "nebula.integtest" version "8.2.0" TODO Explore this plugin for integration tests
- add filtering fields to logger
- add http logging library(maybe from Zalando) instead of custom implementation
- Observability:
- Grafana as logs collector
- Grafana as traces collector
- move testcontainers to separate spring profile
- use embedded external dependencies with an embedded spring profile for local development and tests
- use spun up services for faster local testing
- investigate and apply
@TestBean - Consider the replacement for the archived avro plugin (com.github.davidmc24.gradle.plugin.avro)
- Resolve the warning:
org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport - Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.github.jenkaby.persistance.repository.MessageLogRepository; If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.Bean 'telemetryConfig' of type [com.github.jenkaby.config.telemetry.TelemetryConfig$$SpringCGLIB$$0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). The currently created BeanPostProcessor [recordLatencyBeanPostProcessorDynamicProxy] is declared through a non-static factory method on that class; consider declaring it as static instead. - Investigate why do we need spring data and spring jpa simultaneously ?
- Add docker image caching to GitHub CI for faster builds
Implemented:
- gradle
- multi projects structure
- version catalog
- Testing
- postgres testcontainers
- slice tests (JPA, WebMvc)
- component tests via Cucumber
- use the Gatling testing framework for performance tests
- Kafka:
- Kafka consumers
- string SerDe
- JSON SerDe
- Avro schemas
- schema registry
- Avro SerDe
- skip retrying message consuming for specific exception
- filter Kafka message by field or header value
- Spring general features:
- graceful shutdown. Note
- AOP (around method execution and @annotation)
- Bean Post Processor(BPP)(CGLib proxy type)
- Bean Post Processor(BPP)(JDK Dynamic proxy type)
- @Timed Micrometer
- CI/CD:
- Add profile to docker-compose file to easily start only minimal number of services. Note
- github CI
- improve GitHub CI. Parallelize test executions, cache build and so on
- AuthZ and Authn:
- Spring Security(JWT, Basic)
- Use Keycloak as an authentication server
- Secure REST endpoints via roles
- Custom method arguments resolver(see com.github.jenkaby.config.security.support.LoggedUserResolver)
- Observability:
- Micrometer metrics
- Prometheus as metrics collector
- Grafana dashboard
- provisioning Grafana dashboard, alert-manager rules, Prometheus configurations