/////
Search
Duplicate

24년 1월 17일 수요일

날짜
2024/01/17

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.
아직,, 결론 안 낸 상태.

주간 멘토링 결과 정리