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); }