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

My Ubuntu Desktop config

Enabling Gnome Extensions

Basic AKHQ running with docker (HTTP)