#1
Connecting a Spring Boot application to a PostgreSQL database is one of the most common tasks in Java development. To make this connection clean, maintainable, and environment-specific, it’s best to use the application.properties file and Spring Boot's built-in profiles feature.
In this guide, we’ll walk through how to configure Spring Boot with PostgreSQL using application.properties for both development and production environments. You’ll also see how to manage dependencies and how to switch between environments effortlessly.
Let’s dive in!

What You’ll Learn

  • How to organize your Spring Boot config using application.properties
  • How to set up PostgreSQL connections for dev and prod
  • How to use Spring profiles to separate environments
  • What dependencies you need to work with PostgreSQL

Step 1: Add PostgreSQL Dependency

First things first—your Spring Boot project needs the PostgreSQL driver to connect to a PostgreSQL database.

For Maven

Add this to your pom.xml:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version> <!-- Use the latest stable version -->
</dependency>

For Gradle

Add this to your build.gradle:
implementation 'org.postgresql:postgresql:42.6.0'
Spring Boot will automatically pick up this dependency and use it as the default database driver when PostgreSQL is configured.

Step 2: Organize Configuration Files

Use Spring Boot’s profile-based configuration system to separate dev and prod environments.
  • application.properties: Base file (used to define the active profile)
  • application-dev.properties: Settings for development
  • application-prod.properties: Settings for production
This allows you to write different configs without changing code when switching environments.

Step 3: Configure Development Environment

Here's a simple application-dev.properties file for local development:
# Activate development profile
spring.datasource.url=jdbc:postgresql://localhost:5432/devdb
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver

# JPA settings for development
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
In this example:
  • We're connecting to a local PostgreSQL database.
  • ddl-auto=update allows Hibernate to automatically adjust the schema.
  • show-sql=true helps with debugging by printing SQL statements to the console.

Step 4: Configure Production Environment

In production, you should never hardcode sensitive information. Instead, use environment variables.
Here’s what application-prod.properties might look like:
# PostgreSQL - Production
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=org.postgresql.Driver

# JPA settings for production
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=false
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

Example environment variables:

DB_URL=jdbc:postgresql://prod-db-host:5432/proddb
DB_USERNAME=produser
DB_PASSWORD=securepass
Tip: Use ddl-auto=validate in production to make sure your schema is correct but never auto-updated.

Step 5: Set Active Profile

You can specify the active profile in your base application.properties:
spring.profiles.active=dev
Or override it at runtime:
java -jar yourapp.jar --spring.profiles.active=prod
Or with an environment variable:
export SPRING_PROFILES_ACTIVE=prod
This tells Spring Boot which .properties file to load—either application-dev.properties or application-prod.properties.

Step 6: Verify the Setup

Once everything is configured:
  1. Start your PostgreSQL server (locally or remotely).
  2. Run your Spring Boot app.
  3. Check the logs to confirm connection success.
  4. If there’s an error (e.g., org.postgresql.util.PSQLException), check your credentials and DB host.

Best Practices

  • Use application-dev.properties for local development.
  • Avoid committing sensitive data to version control.
  • Use spring.profiles.active to toggle environments.
  • Use validate or none for ddl-auto in production to avoid unintentional schema changes.
  • Always test your configuration locally before deploying.

Troubleshooting Tips

Problem Solution
App fails to connect to DB Check DB URL, port, and credentials
“Driver not found” error Make sure PostgreSQL dependency is added
Schema not updating Make sure ddl-auto=update is set (for dev only)
Password showing in logs Set spring.jpa.show-sql=false and avoid logging sensitive info

image quote pre code