Postgres database connection for Spring app (Java 11)

I’m using Postgres DB in almost all my projects because it’s good enough for most cases and FREE. This article describes how to connect Java&Spring app to a Postgres database.


First of all – dependencies:
<dependencies>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

</dependencies>


Second, add properties. This is short way:
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/custom_database
    username: postgres
    password: password
  # if you want your app to auto create tables on start:
#  jpa:
#    hibernate:
#      ddl-auto: create


And a little more advanced:
spring:
  jpa:
    properties:
      hibernate:
        jdbc:
          time_zone: UTC
  datasource:
    url: jdbc:postgresql://localhost:5432/custom_database
    username: postgres
    password: password
    hikari:
      connection-timeout: 30000
      maximum-pool-size: 100
      minimum-idle: 10
      idle-timeout: 60000
      max-lifetime: 120000
      auto-commit: true


Extras


Example entity:
import lombok.Getter;
import lombok.Setter;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDateTime;

@Entity
@Table(name = "task")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Task {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column
    private String description;

    @Column(nullable = false)
    private int priority;

    @Column
    private LocalDateTime deadline;

    @Column(nullable = false, length = 63)
    private String userId;

    @Column(nullable = false)
    private String status;
}


Example Repo:
import com.example.todoapp.domain.entity.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface TaskRepository extends JpaRepository<Task, Long> {
    Optional<Task> findByIdAndUserIdAndStatus(Long id, String actualUserId, String name);

    List<Task> findTasksByUserIdAndStatusOrderByPriorityDesc(String actualUserId, String name);
}


Popular posts

Basic AKHQ running with docker (HTTP)

My Ubuntu Desktop config

AKHQ login with Keycloak