Postgres database connection for Spring app (Java 21)

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>


Properties 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 jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

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