2018.8.2 자바 전자상거래 1 부터 2 - chapter 15 ~ 16 SpringSchedule + Redission 까지 분포 식 작업 스케줄 링 실현

목차
제1 5 장 Redission 사용
15.1 총람
15.2 Redission 소개
15.3 리 디 션 통합
15.4 Redission 사용
제1 6 장 스프링 사용 schedule + Redission 분포 식 작업 스케줄 링 실현
16.1 총람
16.2 정시 퀘 스 트 사용 Redission
16.3 wait_시간의 구덩이
제1 5 장 Redission 사용
15.1 총람
  • Redission 의 소개
  • Redission 의 통합
  •  
    15.2 Redission 소개
    생략
     
    15.3 리 디 션 통합
    Redission 의존 도 를 추가 할 뿐만 아니 라 fastxml 의존 도 추가 해 야 합 니 다.
       
          org.redisson
          redisson
          2.9.0
        
        
          com.fasterxml.jackson.dataformat
          jackson-dataformat-avro
          2.9.0
        

     
    15.4 Redission 사용
    package com.mmall.common;
    
    import com.mmall.util.PropertiesUtil;
    import lombok.extern.slf4j.Slf4j;
    import org.redisson.Redisson;
    import org.redisson.config.Config;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    /**
     * Created by geely
     */
    @Component
    @Slf4j
    public class RedissonManager {
    
        private Config config = new Config();
    
        private Redisson redisson = null;
    
        public Redisson getRedisson() {
            return redisson;
        }
    
        private static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
        private static Integer redis1Port = Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));
        private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip");
        private static Integer redis2Port = Integer.parseInt(PropertiesUtil.getProperty("redis2.port"));
    
        @PostConstruct
        private void init(){
            try {
                config.useSingleServer().setAddress(new StringBuilder().append(redis1Ip).append(":").append(redis1Port).toString());
    
                redisson = (Redisson) Redisson.create(config);
    
                log.info("   Redisson  ");
            } catch (Exception e) {
                log.error("redisson init error",e);
            }
        }
    
    }
    

     
    제1 6 장 스프링 사용 schedule + Redission 분포 식 작업 스케줄 링 실현
    16.1 총람
  • Redission 의 자물쇠
  • wait_시간의 구덩이
  •  
    16.2 정시 퀘 스 트 사용 Redission
    @Component
    @Slf4j
    public class CloseOrderTask {
    
        @Autowired
        private IOrderService iOrderService;
    
        @Autowired
        private RedissonManager redissonManager;
    
        @Scheduled(cron="0 */1 * * * ?")
        public void closeOrderTaskV4(){
            RLock lock = redissonManager.getRedisson().getLock(Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK);
            boolean getLock = false;
            try {
                if(getLock = lock.tryLock(0,5, TimeUnit.SECONDS)){
                    log.info("Redisson       :{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());
                    int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2"));                  
                iOrderService.closeOrder(hour);
                }else{
                    log.info("Redisson         :{},ThreadName:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK,Thread.currentThread().getName());
                }
            } catch (InterruptedException e) {
                log.error("Redisson        ",e);
            } finally {
                if(!getLock){
                    return;
                }
                lock.unlock();
                log.info("Redisson       ");
            }
        }
    
    }

     
     
    16.3 wait_시간의 구덩이
    lock.tryLock(0,5, TimeUnit.SECONDS)

    자 물 쇠 를 가 져 올 때 대기 시간 과 유지 시간 을 설정 해 야 합 니 다.대기 시간 설정 이 맞지 않 으 면 프로 세 스 1 이 자 물 쇠 를 가 져 오고 정시 작업 을 수행 한 후에 프로 세 스 2 가 자 물 쇠 를 가 져 오 는 대기 시간 에 이 르 지 못 하면 프로 세 스 2 는 자 물 쇠 를 가 져 오고 작업 을 다시 수행 합 니 다.
    그래서 두 가지 해결 방법 이 있 습 니 다. 하 나 는 waittime 을 0 으로 설정 합 니 다.디 버 깅 으로 작업 수행 의 대략적인 시간 을 평가 하고 더 작은 대기 시간 을 설정 하 는 것 입 니 다. 위험 하지만.

    좋은 웹페이지 즐겨찾기