- Replies:
- 0
- Words:
- 6533

dev
and prod
) and separating settings in application-dev.properties
and application-prod.properties
.application.properties
, with a focus on simplicity, modularity, and best practices for both development and production environments.
pom.xml
. We assume you're also using the PostgreSQL and Kubernetes config extensions:
<dependencies>
<!-- Quarkus PostgreSQL driver -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<!-- Quarkus Hibernate ORM -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
<!-- Optional: Kubernetes config support -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-config</artifactId>
</dependency>
</dependencies>
docker run --name postgres-dev -e POSTGRES_USER=devuser -e POSTGRES_PASSWORD=devpass -e POSTGRES_DB=devdb -p 5432:5432 -d postgres:14
This sets up a development-ready PostgreSQL container with the database devdb
and accessible credentials.
application-dev.properties
application-dev.properties
in src/main/resources
and configure it like so:
%dev.quarkus.datasource.db-kind=postgresql
%dev.quarkus.datasource.username=devuser
%dev.quarkus.datasource.password=devpass
%dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/devdb
%dev.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%dev.quarkus.hibernate-orm.database.generation=drop-and-create
%dev.quarkus.hibernate-orm.sql-load-script=import.sql
This tells Quarkus how to connect to your local database and to auto-generate schema on app startup. You can adjust database.generation
depending on whether you want to recreate the schema each time.
./mvnw quarkus:dev -Dquarkus.profile=dev
Quarkus will automatically pick up the settings from application-dev.properties
.
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
data:
db-kind: postgresql
jdbc-url: jdbc:postgresql://postgres-service:5432/proddb
hibernate-dialect: org.hibernate.dialect.PostgreSQLDialect
apiVersion: v1
kind: Secret
metadata:
name: postgres-secret
type: Opaque
data:
username: cHJvZHVzZXI= # base64 for 'produser'
password: cHJvZHBhc3M= # base64 for 'prodpass'
application-prod.properties
application-prod.properties
:
%prod.quarkus.datasource.db-kind=${DB_KIND:postgresql}
%prod.quarkus.datasource.username=${DB_USERNAME}
%prod.quarkus.datasource.password=${DB_PASSWORD}
%prod.quarkus.datasource.jdbc.url=${JDBC_URL}
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.hibernate-orm.database.generation=validate
%prod.quarkus.hibernate-orm.dialect=${HIBERNATE_DIALECT}
%prod.quarkus.kubernetes-config.enabled=true
%prod.quarkus.kubernetes-config.config-maps=postgres-config
%prod.quarkus.kubernetes-config.secrets=postgres-secret
env:
- name: QUARKUS_PROFILE
value: prod
- name: DB_KIND
valueFrom:
configMapKeyRef:
name: postgres-config
key: db-kind
- name: JDBC_URL
valueFrom:
configMapKeyRef:
name: postgres-config
key: jdbc-url
- name: HIBERNATE_DIALECT
valueFrom:
configMapKeyRef:
name: postgres-config
key: hibernate-dialect
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: postgres-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
application.properties
allows you to maintain clear separation between development and production configurations. With Docker for local development and Kubernetes for production, this setup ensures flexibility, security, and maintainability.
image quote pre code