add: 重试拒绝、pom文件修改

This commit is contained in:
2023-08-15 18:30:29 +08:00
parent 1ae39af607
commit 5b8ce749e5
10 changed files with 1043 additions and 651 deletions

View File

@@ -20,14 +20,15 @@
<log4jdbc.version>1.16</log4jdbc.version>
<swagger.version>2.9.2</swagger.version>
<druid.version>1.1.22</druid.version>
<mapstruct.version>1.2.0.Final</mapstruct.version>
<fastjson.version>1.2.70</fastjson.version>
<mapstruct.version>1.3.1.Final</mapstruct.version>
<sa-token.version>1.31.0</sa-token.version>
<hutool.version>5.7.14</hutool.version>
<jjwt.version>0.11.1</jjwt.version>
<lucene.version>8.2.0</lucene.version>
<!-- <lucene.version>7.6.0</lucene.version>-->
<!-- <lucene.version>7.6.0</lucene.version>-->
<!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 -->
<!-- <jna.version>5.8.0</jna.version>-->
<jna.version>5.9.0</jna.version>
<configuration.version>1.9</configuration.version>
</properties>
<dependencies>
@@ -43,11 +44,6 @@
<version>1.0.4</version>
</dependency>
<!--引入flyway-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
@@ -59,24 +55,24 @@
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
<!-- https://onew.me/logback/2018/09/17/logback_win.html-->
<!-- https://onew.me/logback/2018/09/17/logback_win.html-->
<dependency>
<groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId>
<version>1.17.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>13.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.codehaus.groovy</groupId>-->
<!-- <artifactId>groovy-all</artifactId>-->
<!-- <version>3.0.13</version>-->
<!-- <type>pom</type>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.jetbrains</groupId>-->
<!-- <artifactId>annotations</artifactId>-->
<!-- <version>13.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.codehaus.groovy</groupId>-->
<!-- <artifactId>groovy-all</artifactId>-->
<!-- <version>3.0.13</version>-->
<!-- <type>pom</type>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
@@ -89,8 +85,6 @@
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
<!-- Lucence核心包 -->
<dependency>
<groupId>org.apache.lucene</groupId>
@@ -126,39 +120,47 @@
<version>${lucene.version}</version>
</dependency>
<!-- 日志链路追踪 https://tlog.yomahub.com/pages/f62a84/#%E5%90%8C%E6%AD%A5%E6%97%A5%E5%BF%97-->
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
<!-- 获取系统信息 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>5.3.6</version>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.6.0</version>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<!-- elasticsearch-->
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.7.5</version>
<exclusions>
<exclusion>
<artifactId>lucene-core</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
</exclusions>
</dependency>-->
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.7.5</version>
<exclusions>
<exclusion>
<artifactId>lucene-core</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
</exclusions>
</dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.yomahub</groupId>-->
<!-- <artifactId>liteflow-spring-boot-starter</artifactId>-->
@@ -327,6 +329,12 @@
<version>2.12.0</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--mapStruct依赖-->
<dependency>
@@ -470,12 +478,6 @@
<version>20131018</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
<build>

View File

@@ -5,6 +5,7 @@ import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import io.swagger.annotations.Api;
import org.mybatis.spring.annotation.MapperScan;
import org.nl.common.annotation.RepeatSubmit;
import org.nl.config.SpringContextHolder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -61,6 +62,7 @@ public class AppRun {
*/
@GetMapping("/")
@SaIgnore
@RepeatSubmit(expirationTime = 10)
public String index() {
return "Backend service started successfully";
}

View File

@@ -0,0 +1,28 @@
package org.nl.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
* @Author: lyd
* @Description: 拒绝重复提交, 在一段时间内,发起二次请求就会被拒绝
* @Date: 2023/8/15
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSubmit {
/**
* 过期时间可选默认500
* @return
*/
long expirationTime() default 500;
/**
* 时间单位:可选,默认毫秒
* @return
*/
TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}

View File

@@ -0,0 +1,53 @@
package org.nl.common.aspect;
import cn.hutool.crypto.SecureUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.nl.common.annotation.RepeatSubmit;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RedisUtils;
import org.nl.wms.util.CommonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Author: lyd
* @Description:
* @Date: 2023/8/15
*/
@Aspect
@Component
public class RetrySubmitRejectedAspect {
@Autowired
private RedisUtils redisUtils;
@Around("@annotation(repeatSubmit)")
public Object checkRetrySubmit(ProceedingJoinPoint joinPoint, RepeatSubmit repeatSubmit) throws Throwable {
// 获取连接点的方法签名
Signature signature = joinPoint.getSignature();
// 获取类名
String className = signature.getDeclaringTypeName();
// 获取参数
Object[] args = joinPoint.getArgs();
// 获取方法参数,生成幂等性的唯一标识
String key = generateKey(args, className);
// 检查缓存中是否存在该标识,如果存在,则表示已经执行过该方法,直接拒绝请求
List<String> scan = redisUtils.scan(key);
if (scan.size() > 0) {
throw new BadRequestException("请勿重复提交!");
} else {
redisUtils.set(key, args, repeatSubmit.expirationTime(), repeatSubmit.timeUnit());
}
return joinPoint.proceed();
}
public String generateKey(Object[] objects, String className) {
StringBuilder stringBuilder = new StringBuilder();
String s = CommonUtils.convertObjectArrayToString(objects, "#");
stringBuilder.append(className).append(s); // 类名+参数
return SecureUtil.md5(stringBuilder.toString());
}
}

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.annotation.RepeatSubmit;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
@@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author lyd
* @date 2023-05-15
@@ -32,6 +35,7 @@ public class SchBasePointController {
@GetMapping
@Log("查询点位管理")
@RepeatSubmit
@ApiOperation("查询点位管理")
//@SaCheckPermission("@el.check('schBasePoint:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page){

View File

@@ -0,0 +1,33 @@
package org.nl.wms.util;
/**
* @Author: lyd
* @Description: 通用工具
* @Date: 2023/7/17
*/
public class CommonUtils {
/**
* 将不确定的Object对象转成string根据flag来拼接
* @param objects
* @param flag
* @return
*/
public static String convertObjectArrayToString(Object[] objects, String flag) {
if (objects.length == 0) {
return flag;
}
StringBuilder stringBuilder = new StringBuilder();
for (Object obj : objects) {
if (obj != null) {
stringBuilder.append(obj.toString());
} else {
stringBuilder.append("null");
}
stringBuilder.append(flag);
}
if (stringBuilder.length() > 0) {
stringBuilder.setLength(stringBuilder.length() - 2);
}
return stringBuilder.toString();
}
}

View File

@@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999
<contextName>nlAdmin</contextName>
<property name="log.charset" value="utf-8"/>
<property name="log.pattern"
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!--引入默认的一些设置-->
@@ -21,10 +21,9 @@ https://juejin.cn/post/6844903775631572999
<include resource="log/XgAgvDeviceDriver.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<!-- <encoder>-->
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
@@ -42,9 +41,7 @@ https://juejin.cn/post/6844903775631572999
<!--所有日志最多占多大容量-->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<!-- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
@@ -52,22 +49,15 @@ https://juejin.cn/post/6844903775631572999
</appender>
<!--异步到文件-->
<!-- <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">-->
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
<discardingThreshold>0</discardingThreshold>
<appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="FILE"/>
</appender>
<appender name="MY_FILE" class="org.nl.system.service.lucene.LuceneDefaultAppender">
</appender>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="debug">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="MY_FILE"/>
</root>
<logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>

View File

@@ -1,5 +1,6 @@
package org.nl.task;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
@@ -157,4 +158,11 @@ public class MapperTest {
JSONArray all12 = testMapper.getAll12(list);
System.out.println("结果集:" + all12);
}
@Test
void test1() {
for (int i = 0; i < 2; i++) {
System.out.println(SecureUtil.md5("123456"));
}
}
}