개발/Spring
[Spring data mongodb] 몽고DB에서 시퀀스를 이용하기
상용최
2021. 4. 29. 01:03
반응형
Sequence로 이용할 Document를 하나 정의한다.
@Document
class DatabaseSequence(
@field:Id var id: String,
var seq: Long
) {
}
Sequence를 생성하는 Creator를 정의한다.
@Component
class SequenceCreator(
private var mongoTemplate: MongoTemplate
) {
fun create(sequenceName: String): Long {
val counter: DatabaseSequence = mongoTemplate.findAndModify(
query(where("_id").`is`(sequenceName)),
Update().inc("seq", 1), options().returnNew(true).upsert(true),
DatabaseSequence::class.java
)
return counter.seq
}
}
사용 예
@RestController
class PostController(
private val postService: PostService
, private val sequenceCreator: SequenceCreator
) {
@PostMapping("/task")
fun createTask(@RequestBody @Valid taskRequest:TaskRequest): PostCreatedResponse {
val taskNumber = sequenceCreator.create("taskSeq")
val task = taskRequest.convertToPostEntity(taskNumber)
val postId = postService.create(task).toString()
return PostCreatedResponse(postId, taskNumber)
}
}
생성하고자 하는 시퀀스의 이름을 넘겨서 시퀀스를 받아온다.
반응형