Micronaut+JOQ를 통한 트랜잭션 관리
customer 책상->customerdetail 테이블 순서로 INSERT 처리 시험
트랜잭션 관리 없음
customer_detail 테이블의 INSERT가 실패한 경우, 먼저 INSERT의customer 테이블이 뒤집히지 않습니다.
@Singleton
class CustomersService(
private val dslContext: DSLContext
) {
fun add(name: String) {
val id = Random.nextInt()
dslContext
.insertInto(CUSTOMER, CUSTOMER.ID, CUSTOMER.CREATED_AT)
.values(id, LocalDateTime.now())
.execute()
dslContext
.insertInto(CUSTOMER_DETAIL, CUSTOMER_DETAIL.CUSTOMER_ID, CUSTOMER_DETAIL.NAME, CUSTOMER_DETAIL.CREATED_AT)
.values(id, name, LocalDateTime.now())
.execute()
}
}
DSLcontex#transation 사용
우리는 기대에 따라 거래 관리를 진행한다.
@Singleton
class CustomerService(
private val dslContext: DSLContext
) {
fun add(name: String) {
dslContext.transaction { c ->
val id = Random.nextInt()
DSL.using(c)
.insertInto(CUSTOMER, CUSTOMER.ID, CUSTOMER.CREATED_AT)
.values(id, LocalDateTime.now())
.execute()
DSL.using(c)
.insertInto(
CUSTOMER_DETAIL,
CUSTOMER_DETAIL.CUSTOMER_ID,
CUSTOMER_DETAIL.NAME,
CUSTOMER_DETAIL.CREATED_AT
)
.values(id, name, LocalDateTime.now())
.execute()
}
}
}
@TransactionalAdvice 사용
트랜잭션 관리 기능은 Transactional Advice 를 통해 제공됩니다.
Spring의 Transactional과 비슷하게 생각하면 OK.
Gradle 사용 시 dependencies에 다음과 같은 내용을 추가합니다.
4
dependencies {
...
implementation 'io.micronaut.data:micronaut-data-tx'
}
Transactional Advice를 사용하면 클라스와 방법을 오픈으로 설정해야 합니다.읽기 전용 ReadOnly 초대장도 마련됐다.
@Singleton
open class CustomersService(
private val dslContext: DSLContext
) {
@TransactionalAdvice
open fun add(name: String) {
val id = Random.nextInt()
dslContext
.insertInto(CUSTOMER, CUSTOMER.ID, CUSTOMER.CREATED_AT)
.values(id, LocalDateTime.now())
.execute()
dslContext
.insertInto(CUSTOMER_DETAIL, CUSTOMER_DETAIL.CUSTOMER_ID, CUSTOMER_DETAIL.NAME, CUSTOMER_DETAIL.CREATED_AT)
.values(id, name, LocalDateTime.now())
.execute()
}
}
Transactional Advice 외전이 공식 Doc에 등장하지 않았기 때문에 주의해서 사용하세요.
Reference
이 문제에 관하여(Micronaut+JOQ를 통한 트랜잭션 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kentama/articles/15d558bd89852f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)