An example of clean architecture Flink and Spring Boot
Cet example propose un packaging d'un job flink selon le pattern d'architecture hexagonale (également appelé Clean Architecture). De ce fait, les principes SOLID sont utilisés dans le code, notamment le Dependency Inversion Principle (à ne pas confondre avec la classique injection de dépendances avec Spring par exemple).
Il est divisé en 3 modules gradle: application
, core
, job
application
: l'application spring boot qui permet de piloter le job, ici depuis un endpoint webcore
: le code métier indépendant utilisable par l'application
ou lejob
job
: le(s) job(s) flink utilisant le code métier ducore
chacun constitué de 3 packages: domain
, usecase
et infrastructure
qui doivent respecter ces règles :
domain
contient le métier et son intelligence et n'a aucune dépendance vers l'extérieur : ni vers des frameworks (Hibernate par exemple), ni vers les packagesusecase
etinfrastructure
.usecase
est un chef d'orchestre et va dépendre uniquement dudomain
pour répondre à des cas d'utilisation métier.usecase
ne doit pas avoir de dépendances versinfrastructure
.infrastructure
contient toute la technique, et ne doit pas contenir de métier.infrastructure
a des dépendances versdomain
,usecase
et les frameworks.
./gradlew assemble
./gradlew check
cd docker-compose && docker-composer up
- Swagger available at: http://localhost:8080/swagger-ui.html
- Flink job manager available at: http://localhost:8081
With swagger job-controller
or with curl: curl -X POST "http://localhost:8080/jobs/wordCount" -H "accept: */*"