Der Dev-Service in Quarkus bietet dem Entwickler eine sehr komfortable Möglichkeit die lokale Entwicklung zu beschleunigen. Nach einer Änderung des Quellcodes werden die angepassten Teile automatisch neu bereitgestellt und man kann die Anpassungen sofort testen. Darüber hinaus stehen in den Dev-Services weitere Unterstützung bei der Entwicklung zur Verfügung.
Sobald man bspw. einen JDBC-Treiber für seine Persistenz-Schicht einsetzt, wird je nach Treiber eine entsprechende Datenbank automatisch über Testcontainers zur Verfügung gestellt. Das funktioniert für sehr viele weitere Technologien wie bspw. Messaging über Kafka oder AMQP, aber auch für die Security in Form von Keycloak. Diese Möglichkeiten sind schon sehr vielfältig, dennoch wurden in vielen Projekten zusätzlich auch weitere Docker-Container insbesondere über Docker Compose für die lokale Entwicklung eingesetzt.
Mit dem Release 3.22 wurde diese Möglichkeit mit den Dev-Services verbunden. Es lassen sich jetzt über eine compose-devservices.yml
diese Container zusätzlich mit integrieren. Damit müssen diese Container nicht mehr separat gestartet werden. Die folgende yml-Datei konfiguriert eine PostgreSQL und einen mailhog-Container.
services:
db:
image: postgres:17
healthcheck:
test: pg_isready -U gedoplan -d education
interval: 5s
timeout: 3s
retries: 3
ports:
- '5432'
environment:
POSTGRES_USER: gedoplan
POSTGRES_PASSWORD: secret09
POSTGRES_DB: education
volumes:
- ./conf:/docker-entrypoint-initdb.d
- edu_postgres_data:/var/lib/postgresql/data
mailhog:
image: mailhog/mailhog
ports:
- "1025"
- "8025"
labels:
io.quarkus.devservices.compose.config_map.port.1025: quarkus.mailer.port
volumes:
edu_postgres_data:
Die PostgreSQL Datenbank wird von Quarkus automatisch mit der Datasource verbunden. Quarkus erkennt über das verwendete postgres-Image, dass keine vorkonfigurierte Datenbank gestartet werden muss. Bei mailhog handelt es sich um einen Dienst, der nicht automatisch mit zur Verfügung gestellt werden würde. Wird in Quarkus die Mail-Extension verwendet, wird in den Dev-Services automatisch in den Mock-Modus umgeschaltet. Damit werden alle versendeten Mails im Quarkus-Log ausgegeben und intern gespeichert. Das kann man in den application.properties
deaktivieren. Dann benötigen wir jedoch eine Konfiguration für einen Mailserver. Diesen starten wir als zusätzlichen Container und verbinden den Port 1025 mit der Quarkus-Konfiguration quarkus.mailer.port.
Ich glaube durch die Integration von Docker Compose in die Dev-Services ist es in vielen Projekten einfacher eine lokale Entwicklungsumgebung bereitzustellen und damit die Entwicklung nochmals zu optimieren. Eine ausführliche Dokumentation findet ihr hier: https://quarkus.io/guides/compose-dev-services.