فهرست منبع

增加 注解 是否计数参数

xiewj 2 سال پیش
والد
کامیت
7f07f16ef5

+ 5 - 0
src/main/java/com/fdkankan/openApi/component/ValidateApi.java

@@ -12,4 +12,9 @@ public @interface ValidateApi {
      * @return 接口根路径:接口名
      */
     String method() default "";
+
+    /**
+     * @return 是否计数 默认true:计数
+     */
+    boolean counting() default true;
 }

+ 20 - 11
src/main/java/com/fdkankan/openApi/component/ValidateApiAOP.java

@@ -41,6 +41,9 @@ public class ValidateApiAOP {
     @Before("@annotation(validateApi)")
     public void Before(JoinPoint joinPoint, ValidateApi validateApi) {
         String method = validateApi.method();
+        boolean counting = validateApi.counting();
+
+
         log.info("前置拦截鉴权,{}", method);
         //获取请求对象
         ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
@@ -65,12 +68,15 @@ public class ValidateApiAOP {
                 throw new ApiBusinessException(HttpStatus.COUNT_OVER, "");
             }
         }
-        //预减次数
-        long decrStock = redisUtil.decr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
-        log.info("前置减次数后,{}", decrStock);
-        if (decrStock < 1) {
-            localOverCache.setTimedCache(authorization, true);
+        if (counting) {
+            //预减次数
+            long decrStock = redisUtil.decr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
+            log.info("前置减次数后,{}", decrStock);
+            if (decrStock < 1) {
+                localOverCache.setTimedCache(authorization, true);
+            }
         }
+
     }
 
     /**
@@ -84,6 +90,7 @@ public class ValidateApiAOP {
     @AfterReturning(pointcut = "@annotation(validateApi)", returning = "jsonResult")
     public void doAfterReturning(JoinPoint joinPoint, ValidateApi validateApi, Object jsonResult) throws NoSuchMethodException {
         String method = validateApi.method();
+        boolean counting = validateApi.counting();
         log.info("后置拦截截鉴权计数,{},返回内容{}", method, jsonResult);
         //获取请求对象
         ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
@@ -91,13 +98,15 @@ public class ValidateApiAOP {
         String authorization = request.getHeader("Authorization");
         //方法签名
         if (BeanUtil.toBean(jsonResult, ResultData.class).getCode() == 0) {
-            //预减次数
-            //进入队列,同步数据库
-            log.info("进入队列,同步数据库");
-            callApiSender.callApi(new CallApiDTO(authorization));
+            if (counting) {
+                log.info("进入队列,同步数据库");
+                callApiSender.callApi(new CallApiDTO(authorization));
+            }
         } else {
-            log.info("业务非正常返回,进行次数回滚+1:{}");
-            long incrStock = redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
+            if (counting) {
+                log.info("业务非正常返回,进行次数回滚+1:{}");
+                long incrStock = redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
+            }
         }
     }
 }

+ 1 - 1
src/main/java/com/fdkankan/openApi/controller/TestController.java

@@ -38,7 +38,7 @@ public class TestController extends BaseController {
 
     @GetMapping("/test")
     @SaIgnore
-    @ValidateApi(method = "test:test")
+    @ValidateApi(method = "test:test", counting = false)
     public ResultData test() {
         SceneEntity bySceneCode = sceneService.findBySceneCode("SS-t-yotkjVf55A");
         User byUserName = userService.findByUserName("18666186515");

+ 166 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <springProperty scope="context" name="LOG_MAX_HISTORY" source="logging.fdkk.maxHistory"/>
+    <!-- 日志根目录-->
+    <springProperty scope="context" name="LOG_HOME" source="logging.path"/>
+
+    <!-- 日志级别 -->
+    <springProperty scope="context" name="LOG_LEVEL" source="logging.fdkk.level" defaultValue="DEBUG"/>
+
+    <!--  标识这个"STDOUT" 将会添加到这个logger -->
+    <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
+
+    <!-- 日志文件名称-->
+    <property name="LOG_PREFIX" value="openApi"/>
+
+    <!-- 日志文件编码-->
+    <property name="LOG_CHARSET" value="UTF-8"/>
+
+    <!-- 日志文件路径+日期-->
+    <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}"/>
+
+    <!--对日志进行格式化-->
+
+    <!--文件大小,默认10MB-->
+    <property name="MAX_FILE_SIZE" value="50MB"/>
+
+    <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
+    <property name="MAX_HISTORY" value="10"/>
+
+    <!--输出到控制台-->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+    <!--输出到文件-->
+    <appender name="0" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    </appender>
+
+    <!-- 定义 ALL 日志的输出方式:-->
+    <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!--日志文件路径,日志文件名称-->
+        <File>${LOG_HOME}/${LOG_PREFIX}_all.log</File>
+        <!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件路径,新的 ALL 日志文件名称,“ i ” 是个变量 -->
+            <FileNamePattern>${LOG_DIR}/${LOG_PREFIX}_all%i.log</FileNamePattern>
+
+            <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+            <!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 定义 INFO 日志的输出方式:-->
+    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 下面为配置只输出error级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <OnMismatch>DENY</OnMismatch>
+            <OnMatch>ACCEPT</OnMatch>
+        </filter>
+        <append>true</append>
+        <!--日志文件路径,日志文件名称-->
+        <File>${LOG_HOME}/${LOG_PREFIX}_info.log</File>
+        <!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
+            <!--日志文件路径,新的 INFO 日志文件名称,“ i ” 是个变量 -->
+            <FileNamePattern>${LOG_DIR}/${LOG_PREFIX}_info%i.log</FileNamePattern>
+
+            <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+
+            <!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <!-- 输出的日志内容格式化-->
+        <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 定义 ERROR 日志的输出方式:-->
+    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 下面为配置只输出error级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <OnMismatch>DENY</OnMismatch>
+            <OnMatch>ACCEPT</OnMatch>
+        </filter>
+        <!--日志文件路径,日志文件名称-->
+        <File>${LOG_HOME}/${LOG_PREFIX}_err.log</File>
+
+        <!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
+            <!--日志文件路径,新的 ERR 日志文件名称,“ i ” 是个变量 -->
+            <FileNamePattern>${LOG_DIR}/${LOG_PREFIX}_err%i.log</FileNamePattern>
+
+            <!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+
+            <!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <!-- 输出的日志内容格式化-->
+        <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+    <!-- additivity 设为false,则logger内容不附加至root ,配置以配置包下的所有类的日志的打印,级别是 ERROR-->
+
+    <logger name="org.springframework" level="ERROR"/>
+    <logger name="org.apache.commons" level="ERROR"/>
+    <logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
+    <logger name="com.alibaba.dubbo.remoting" level="ERROR"/>
+    <logger name="com.apache.ibatis" level="${LOG_LEVEL}"/>
+    <logger name="java.sql.Connection" level="${LOG_LEVEL}"/>
+    <logger name="java.sql.Statement" level="${LOG_LEVEL}"/>
+    <logger name="java.sql.PreparedStatement" level="${LOG_LEVEL}"/>
+    <logger name="io.lettuce.core.protocol" level="ERROR"/>
+    <logger name="io.lettuce.core" level="ERROR"/>
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+    <logger name="org.apache.http" level="ERROR"/>
+
+    <!-- ${LOG_ROOT_LEVEL} 日志级别 -->
+    <root level="${LOG_ROOT_LEVEL}">
+
+        <!-- 标识这个"${STDOUT}"将会添加到这个logger -->
+        <appender-ref ref="${STDOUT}"/>
+
+        <!-- FILE_ALL 日志输出添加到 logger -->
+        <appender-ref ref="FILE_ALL"/>
+
+        <!-- FILE_INFO 日志输出添加到 logger -->
+        <appender-ref ref="FILE_INFO"/>
+
+        <!-- FILE_ERROR 日志输出添加到 logger -->
+        <appender-ref ref="FILE_ERROR"/>
+    </root>
+
+</configuration>