spring-boot with r2dbc for PostgreSQL
· 약 3분
이 문서는 Spring Boot에서 R2DBC와 PostgreSQL을 함께 사용할 때 유용한 설정과 팁을 정리한 것입니다.
✅ 의존성 설정 (Gradle)
plugins {
id("org.springframework.boot") version "3.2.5"
id("io.spring.dependency-management") version "1.1.4"
kotlin("jvm") version "1.9.23"
}
...
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
implementation("io.r2dbc:r2dbc-postgresql")
runtimeOnly("org.postgresql:postgresql") // Flyway or JDBC tools
}
✅ application.yml 설정 예시
spring:
r2dbc:
url: r2dbc:postgresql://localhost:5432/dummy
username: devuser
password: devpass
pool:
enabled: true
initial-size: 5
max-size: 20
max-idle-time: 30s
max-create-connection-time: 5s
validation-query: SELECT 1
properties:
connectTimeout: PT15S
ssl: false
maxCreateConnectionTime: PT3S
maxAcquireTime: PT10S
maxLifeTime: PT300S
✅ R2dbcEntityTemplate 파라미터 사용 예시
Criteria API
val criteria = Criteria.where("name").like("%test%")
template.select<DummyEntity>()
.matching(Query.query(criteria))
.all()
.collectList()
복합 쿼리
val query = Query
.query(Criteria.where("name").like("%test%"))
.limit(10)
.sort(Sort.by("id").descending())
template.select<DummyEntity>()
.matching(query)
.all()
✅ DatabaseClient로 직접 파라미터 바인딩
template.databaseClient
.sql("SELECT * FROM dummy WHERE name like %:name%")
.bind("name", "test")
.map { row -> row.get("name", String::class.java) }
.first()
