SpringBoot 차단기 와 사용자 정의 주석 으로 데이터 차단 인 스 턴 스 를 진행 합 니 다.

6447 단어 JavaRedisSpringBoot
성명: 본 고 는 순 전 히 개인 적 인 필기 입 니 다. 만약 에 참고 가치 가 있다 면 저 는 매우 기 쁩 니 다. 만약 에 잘못 이 있 거나 더 좋 은 해결 방법 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요. 모두 가 함께 성장 하고 악담 을 하지 마 세 요.자원 공유 QQ 군 에 오신 것 을 환영 합 니 다: 275343679, 함께 지식 을 발견 하고 지식 을 이해 하 며 지식 을 배우 고 지식 을 공유 합 니 다.홈 페이지: www. itlantian. top 
=======================================================================
SpringBoot   차단기 와 사용자 정의 주석 으로 데이터 차단
절단면 스위치 설정:
spring.aop.auto: true spring.aop.proxy-target-class: true
1. 실현 코드 는 다음 과 같다.
제어 층
package com.xxx.product.admin.controller.stocks;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;



/**
 * @ClassName StockRedisController
 * @Description 
 * @Author zhangs
 * @Date 2018 10 9    11:04:43
 */
@Controller
@RequestMapping("/stockRedis")
public class StockRedisController {

    private static final Logger logger = LoggerFactory.getLogger(StockRedisController.class);
	
    @StockAnnotation(modelName = "stockRedis", option = "test")
    @RequestMapping("/test")
    @ResponseBody
    public String test(@RequestBody String param, HttpServletRequest request){
    	
    	try {
    		logger.info("    。。。。。"+param);
			Thread.sleep(1000L);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	   logger.info("    。。。。。"+param);
    	return  "OK";
    }
    
    
}
  •  주해
    package com.xxx.common.stock.aop;
    
    import java.lang.annotation.*;
    
    
    //@Retention:          ,
    @Retention(RetentionPolicy.RUNTIME)//     class        ,             
    //@Target:         
    @Target({ElementType.METHOD,ElementType.PARAMETER})//        
    @Inherited//               
    @Documented//          javadoc 
    public @interface StockAnnotation {
    	 /**
         *     
         */
        String modelName() default "";
    
        /**
         *     
         */
        String option();
    }
    
  •  정의 절단면
    package com.xxx.common.stock.interceptor;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.util.ObjectUtils;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import com.xxx.common.stock.aop.StockAnnotation;
    import com.xxx.common.utils.mapper.JsonMapper;
    import com.xxx.product.stocks.domain.vo.StockPara;
    import com.xxx.product.stocks.service.intf.StockService;
    
    /**
     * @ClassName StockUpdateAspect
     * @Description 
     * @Author zhangs
     * @Date 2018 10 26    3:17:49
     */
    @Aspect //           
    @Component //           ,i   ,      。ps:     ,         
    public class StockUpdateAspect {
    
        private static final Logger logger = LoggerFactory.getLogger(StockUpdateAspect.class);	
    	
        @Autowired
        private StockService          stockService;
    	/**
         *   Pointcut,Pointcut   ,         ,         
         */
    	@Pointcut("@annotation(com.xxx.common.stock.aop.StockAnnotation)")
    	public void StockAspect (){
    		 System.out.println("       ");
    	}
    	
    	/**
    	 *      
    	 * @param pjp
    	 * @param stockAnnotation
    	 * @return
    	 * @throws Throwable
    	 */
    	@Around(value = "StockAspect()  && @annotation(stockAnnotation)")
    	public Object doAround(ProceedingJoinPoint pjp, StockAnnotation stockAnnotation) throws Throwable {
    		
    		   Object result = null;
    		try {
    		       logger.info("     >> Name:{} >> Option:{} >> param:{}",stockAnnotation.modelName(),stockAnnotation.option(),Arrays.toString(pjp.getArgs()));
    		       //     ,      
    		       //ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    		       //HttpServletRequest request = attributes.getRequest();
    		       //        
                   /*logger.info("IP: {} >> URI: {} >> HTTP_METHOD: {} >> CLASS_METHOD: {} >> ARGS: {}",request.getRemoteAddr() ,request.getRequestURI(),request.getMethod(),
    		         pjp.getSignature().getDeclaringTypeName() + "_" + pjp.getSignature().getName(),Arrays.toString(pjp.getArgs()));*/
    		       result =pjp.proceed();
    		       //      
    		       String data=JsonMapper.toJsonString(pjp.getArgs()[0]);
    		       logger.info("ARGS  1:{}", data);
    		       List  stockList=new ArrayList();
    		       StockPara stock=null;
    		       String regex="(\"activeCode\":\"|\"goodsSid\":)(.*?)(\"|,|},|}|}]$)";//     
    		       Matcher matcher = Pattern.compile(regex).matcher(data);
    		       while (matcher.find()) {
    		    	   logger.info("  :{} >>    :{} >>    : {}",matcher.group(0),matcher.group(1),matcher.group(2));
    		            stock=new StockPara();
    		            String value=matcher.group(2);
    		            if(!ObjectUtils.isEmpty(matcher.group(2))){
    		            	
    		            	if(matcher.group(1).indexOf("activeCode")>0){
    		            		stock.setActiveCode(value);
    		            	}else if(matcher.group(1).indexOf("goodsSid")>0){
    		            		stock.setGoodsSid(Long.valueOf(value));
    		            	}
    		            	stockList.add(stock);
    		            }
    		        };
    		        stockRedisService.synUpdateStockForRedis(stockList);
    		} catch (Exception e) {
    			// TODO: handle exception
    			logger.error("      >>     :{} >>     :{} >>   :{}",stockAnnotation.modelName(),stockAnnotation.option(),e.toString());
    		}		     
    	
    		return result;
    	}
    	
    }
    

  • 좋은 웹페이지 즐겨찾기