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> <log4jdbc.version>1.16</log4jdbc.version>
<swagger.version>2.9.2</swagger.version> <swagger.version>2.9.2</swagger.version>
<druid.version>1.1.22</druid.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> <sa-token.version>1.31.0</sa-token.version>
<hutool.version>5.7.14</hutool.version> <hutool.version>5.7.14</hutool.version>
<jjwt.version>0.11.1</jjwt.version> <jjwt.version>0.11.1</jjwt.version>
<lucene.version>8.2.0</lucene.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 --> <!-- 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> <configuration.version>1.9</configuration.version>
</properties> </properties>
<dependencies> <dependencies>
@@ -43,11 +44,6 @@
<version>1.0.4</version> <version>1.0.4</version>
</dependency> </dependency>
<!--引入flyway--> <!--引入flyway-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.flywaydb</groupId> <groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId> <artifactId>flyway-mysql</artifactId>
@@ -59,24 +55,24 @@
<artifactId>reflections</artifactId> <artifactId>reflections</artifactId>
<version>0.9.10</version> <version>0.9.10</version>
</dependency> </dependency>
<!-- https://onew.me/logback/2018/09/17/logback_win.html--> <!-- https://onew.me/logback/2018/09/17/logback_win.html-->
<dependency> <dependency>
<groupId>org.fusesource.jansi</groupId> <groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId> <artifactId>jansi</artifactId>
<version>1.17.1</version> <version>1.17.1</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains/annotations --> <!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
<dependency> <!-- <dependency>-->
<groupId>org.jetbrains</groupId> <!-- <groupId>org.jetbrains</groupId>-->
<artifactId>annotations</artifactId> <!-- <artifactId>annotations</artifactId>-->
<version>13.0</version> <!-- <version>13.0</version>-->
</dependency> <!-- </dependency>-->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.codehaus.groovy</groupId>--> <!-- <groupId>org.codehaus.groovy</groupId>-->
<!-- <artifactId>groovy-all</artifactId>--> <!-- <artifactId>groovy-all</artifactId>-->
<!-- <version>3.0.13</version>--> <!-- <version>3.0.13</version>-->
<!-- <type>pom</type>--> <!-- <type>pom</type>-->
<!-- </dependency>--> <!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
@@ -89,8 +85,6 @@
<artifactId>tlog-all-spring-boot-starter</artifactId> <artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version> <version>1.5.0</version>
</dependency> </dependency>
<!-- Lucence核心包 --> <!-- Lucence核心包 -->
<dependency> <dependency>
<groupId>org.apache.lucene</groupId> <groupId>org.apache.lucene</groupId>
@@ -126,39 +120,47 @@
<version>${lucene.version}</version> <version>${lucene.version}</version>
</dependency> </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> <dependency>
<groupId>com.github.oshi</groupId> <groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId> <artifactId>oshi-core</artifactId>
<version>5.3.6</version> <version>5.0.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.java.dev.jna</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>jna</artifactId> <artifactId>httpclient</artifactId>
<version>5.6.0</version> <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> </dependency>
<!-- elasticsearch--> <!-- elasticsearch-->
<!-- <dependency> <!-- <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.7.5</version> <version>2.7.5</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>lucene-core</artifactId> <artifactId>lucene-core</artifactId>
<groupId>org.apache.lucene</groupId> <groupId>org.apache.lucene</groupId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency>--> </dependency>-->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.yomahub</groupId>--> <!-- <groupId>com.yomahub</groupId>-->
<!-- <artifactId>liteflow-spring-boot-starter</artifactId>--> <!-- <artifactId>liteflow-spring-boot-starter</artifactId>-->
@@ -327,6 +329,12 @@
<version>2.12.0</version> <version>2.12.0</version>
</dependency> </dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--mapStruct依赖--> <!--mapStruct依赖-->
<dependency> <dependency>
@@ -470,12 +478,6 @@
<version>20131018</version> <version>20131018</version>
</dependency> </dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -5,6 +5,7 @@ import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache; import com.alicp.jetcache.anno.config.EnableMethodCache;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.nl.common.annotation.RepeatSubmit;
import org.nl.config.SpringContextHolder; import org.nl.config.SpringContextHolder;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -61,6 +62,7 @@ public class AppRun {
*/ */
@GetMapping("/") @GetMapping("/")
@SaIgnore @SaIgnore
@RepeatSubmit(expirationTime = 10)
public String index() { public String index() {
return "Backend service started successfully"; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.annotation.RepeatSubmit;
import org.nl.common.base.TableDataInfo; import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log; import org.nl.common.logging.annotation.Log;
@@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit;
/** /**
* @author lyd * @author lyd
* @date 2023-05-15 * @date 2023-05-15
@@ -32,6 +35,7 @@ public class SchBasePointController {
@GetMapping @GetMapping
@Log("查询点位管理") @Log("查询点位管理")
@RepeatSubmit
@ApiOperation("查询点位管理") @ApiOperation("查询点位管理")
//@SaCheckPermission("@el.check('schBasePoint:list')") //@SaCheckPermission("@el.check('schBasePoint:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page){ 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> <contextName>nlAdmin</contextName>
<property name="log.charset" value="utf-8"/> <property name="log.charset" value="utf-8"/>
<property name="log.pattern" <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"/> <springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/> <property name="LOG_HOME" value="${logPath}"/>
<!--引入默认的一些设置--> <!--引入默认的一些设置-->
@@ -21,10 +21,9 @@ https://juejin.cn/post/6844903775631572999
<include resource="log/XgAgvDeviceDriver.xml"/> <include resource="log/XgAgvDeviceDriver.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi> <encoder>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<!-- <encoder>-->
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder> </encoder>
</appender> </appender>
@@ -42,9 +41,7 @@ https://juejin.cn/post/6844903775631572999
<!--所有日志最多占多大容量--> <!--所有日志最多占多大容量-->
<totalSizeCap>20GB</totalSizeCap> <totalSizeCap>20GB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<!-- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符--> <!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder> </encoder>
@@ -52,22 +49,15 @@ https://juejin.cn/post/6844903775631572999
</appender> </appender>
<!--异步到文件--> <!--异步到文件-->
<!-- <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">--> <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender"> <discardingThreshold>0</discardingThreshold>
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize> <queueSize>500</queueSize>
<appender-ref ref="FILE"/> <appender-ref ref="FILE"/>
</appender> </appender>
<appender name="MY_FILE" class="org.nl.system.service.lucene.LuceneDefaultAppender">
</appender>
<!--开发环境:打印控制台--> <!--开发环境:打印控制台-->
<springProfile name="dev"> <springProfile name="dev">
<root level="debug"> <root level="debug">
<appender-ref ref="CONSOLE"/> <appender-ref ref="CONSOLE"/>
<appender-ref ref="MY_FILE"/>
</root> </root>
<logger name="org.springframework" level="ERROR" additivity="false"> <logger name="org.springframework" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/> <appender-ref ref="CONSOLE"/>

View File

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

View File

@@ -2,17 +2,13 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.10.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<modules> <modules>
<module>nlsso-server</module> <module>nlsso-server</module>
</modules> </modules>
@@ -21,18 +17,8 @@
<artifactId>nladmin-system</artifactId> <artifactId>nladmin-system</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>核心模块</name> <name>核心模块</name>
<dependencyManagement> <properties>
<dependencies> <sa-token.version>1.31.0</sa-token.version>
<!-- SpringBoot的依赖配置--> </properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.10.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> </project>