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