- 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.propertiesapplication-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.propertiesapplication-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