매일 새벽 1시에 관심 상품 목록 제목으로 검색해서, 최저가 정보를 업데이트 하는 스케줄러 만들기.
utils > Scheduler.java
@RequiredArgsConstructor // final 멤버 변수를 자동으로 생성합니다.
@Component // 스프링이 필요 시 자동으로 생성하는 클래스 목록에 추가합니다.
public class Scheduler {
private final ProductRepository productRepository;
private final ProductService productService;
private final NaverShopSearch naverShopSearch;
// 초, 분, 시, 일, 월, 주 순서
@Scheduled(cron = "0 0 1 * * *") // cron 실행하는 때 라는 의미
public void updatePrice() throws InterruptedException { //방해적 요소가 있다고 오류를 띄워라
System.out.println("가격 업데이트 실행");
// 저장된 모든 관심상품을 조회합니다.
List<Product> productList = productRepository.findAll();
for (int i=0; i<productList.size(); i++) {
// 1초에 한 상품 씩 조회합니다 (Naver 제한: 너무 자주 실행하면 네이버가 막기때문)
TimeUnit.SECONDS.sleep(1);
// i 번째 관심 상품을 꺼냅니다.
Product p = productList.get(i);
// i 번째 관심 상품의 제목으로 검색을 실행합니다.
String title = p.getTitle();
String resultString = naverShopSearch.search(title);
// i 번째 관심 상품의 검색 결과 목록 중에서 첫 번째 결과를 꺼냅니다.
List<ItemDto> itemDtoList = naverShopSearch.fromJSONtoItems(resultString);
ItemDto itemDto = itemDtoList.get(0);
// i 번째 관심 상품 정보를 업데이트합니다.
Long id = p.getId();
productService.updateBySearch(id, itemDto);
}
}
}
service > ProductSersvice.java > updateBySearch
@Transactional
public Long updateBySearch (Long id, ItemDto itemDto){
Product product = productRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
product.updateByItemDto(itemDto);
return id;
}
updateBySearch 는 product 에서 Dto정보를 받아오는 메서드 updateByItemDto가 필요하므로 Product클래스에 가서 메서드를 만들어준다.
models > Product.java
@Transactional
public Long updateBySearch (Long id, ItemDto itemDto){
Product product = productRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
product.updateByItemDto(itemDto);
return id;
마지막으로 스케줄러를 사용할 수 있게
Application 클래스에 어노테이션을 추가해준다. @EnableScheduling
@EnableScheduling
@EnableJpaAuditing //시간 자동 변경이 가능하도록 합니다.
@SpringBootApplication //스프링 부트임을 선언
public class Week04Application {
public static void main(String[] args) {
SpringApplication.run(Week04Application.class, args);
}
}
'나만의 select shop 만들기' 카테고리의 다른 글
등록한 관심상품 최저가 설정하기 (0) | 2020.12.10 |
---|---|
관심 상품 보여주기 (0) | 2020.12.08 |
관심 상품 등록하기 (0) | 2020.12.08 |
상품 검색 기능 만들기 (0) | 2020.12.08 |
HTML, Css, 이미지파일 (0) | 2020.12.07 |