Spring Batch vs Spring Quartz (완료 시 )
문제
•
Spring Quartz 를 사용하라는데 맞는지 모르겠어요 >> 튜터님한테 질문하고 싶어요 “지훈”
Quartz is a scheduling framework. Like "execute something every hour or every last Friday of the month"
Spring Batch is a framework that defines that "something" that will be executed. You can define a job, that consists of steps. Usually, a step is something that consists of an item reader, an optional item processor, and an item writer, but you can define a custom step. You can also tell Spring Batch to commit every 10 items and a lot of other stuff.
•
동시성 처리를 방지 처리 이렇게 하는 게 맞을까 싶어요 >> 튜터님한테 질문하고 싶어요 “지훈”
◦
REDIS로 분산락 걸고, 배치 작업 이후 락 해제
◦
일단 Spring Batch로 구현
@Component
@RequiredArgsConstructor
@Slf4j
public class BuyDeadlineScheduler {
private final BuyService buyService;
private final StringRedisTemplate redisTemplate;
@Retryable(
retryFor = RuntimeException.class,
maxAttempts = 3,
backoff = @Backoff(delay = 2000)
)
@Scheduled(cron = "59 59 23 * * ?")
public void closeBuyOfPassedDealine() {
Boolean hasLock = redisTemplate.opsForValue().setIfAbsent("CLOSE_BUY_SCHEDULE_LOCK", "LOCKED", 2, TimeUnit.SECONDS);
if (hasLock) {
buyService.deleteAllBuyBidsOfOutDatedFrom(LocalDateTime.now());
redisTemplate.delete("CLOSE_BUY_SCHEDULE_LOCK");
}
}
@Recover
void recover(RuntimeException exception) {
log.error("Exception Message : " + exception.getMessage());
log.error("Exception Stack Trace : " + Arrays.toString(exception.getCause().getStackTrace()));
}
}
Java
복사
•
Quartz를 이용한 구현 << DataSource를 지정해줘야하는 이슈가 있음
해결방안
•
아직 팀원들과 회의하지 못함
서비스에서 응답 타입을 엔티티로 주어져도 괜찮은가
문제
•
컨트롤러에서
해결방안
1.
다른 도메인에서 서비스에 접근하여 가져온 데이터를 가공하기 쉽도록 엔티티를 변환하도록 하자
a.
문제점 : 하지만 여러 엔티티가 필요한 경우 단일 엔티티로 반환 어려워서 DTO로 반환해야 함
b.
아직,, 결론 안 낸 상태.