반응형
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)
}
}
생성하고자 하는 시퀀스의 이름을 넘겨서 시퀀스를 받아온다.
반응형
'개발 > Spring' 카테고리의 다른 글
[ReactiveCrudRepository] 데이터 삭제가 안되는 이슈 (0) | 2021.05.07 |
---|---|
[Spring] @ContextConfiguration with Kotlin (0) | 2021.04.29 |
[Querydsl] SemanticException: right-hand operand of a binary operator was null (0) | 2021.04.12 |
[Spring] @TestConfiguration (0) | 2021.04.09 |
[Spring Security] @WebMvcTest Error creating bean with name 'securityConfig' defined (0) | 2021.04.05 |
댓글