马府强
2 years ago
25 changed files with 682 additions and 0 deletions
@ -0,0 +1,138 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
|||
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"> |
|||
|
|||
|
|||
<properties> |
|||
<maven.compiler.source>8</maven.compiler.source> |
|||
<maven.compiler.target>8</maven.compiler.target> |
|||
<spring-boot.version>2.1.8.RELEASE</spring-boot.version> |
|||
<spring-cloud.version>Greenwich.SR3</spring-cloud.version> |
|||
<spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> |
|||
<java.version>1.8</java.version> |
|||
<slf4j.version>1.7.25</slf4j.version> |
|||
<log4j2.version>2.12.0</log4j2.version> |
|||
<log4j.version>1.2.17</log4j.version> |
|||
<slf4j-log4j12.version>1.6.1</slf4j-log4j12.version> |
|||
<dubbo.version>2.7.6</dubbo.version> |
|||
<dubbox.version>2.8.4</dubbox.version> |
|||
<curator.version>4.0.1</curator.version> |
|||
<zk.version>3.4.6</zk.version> |
|||
<zkclient.version>0.1</zkclient.version> |
|||
<tlog-example-api.version>1.0.0</tlog-example-api.version> |
|||
<tlog.version>1.5.0</tlog.version> |
|||
</properties> |
|||
|
|||
<modelVersion>4.0.0</modelVersion> |
|||
<groupId>com.yomahub.tlog.example</groupId> |
|||
<artifactId>tlog-example-logback-feign-consumer</artifactId> |
|||
<version>1.0</version> |
|||
|
|||
<dependencies> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
<!-- 去掉springboot默认配置 --> |
|||
<exclusions> |
|||
<exclusion> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-logging</artifactId> |
|||
</exclusion> |
|||
</exclusions> |
|||
</dependency> |
|||
<!--使用log4j2替换 LogBack--> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-log4j2</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>com.google.guava</groupId> |
|||
<artifactId>guava</artifactId> |
|||
<version>30.1-jre</version> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-aop</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-data-redis</artifactId> |
|||
</dependency> |
|||
|
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.cloud</groupId> |
|||
<artifactId>spring-cloud-starter-openfeign</artifactId> |
|||
</dependency> |
|||
|
|||
<!-- <dependency>--> |
|||
<!-- <groupId>com.alibaba.cloud</groupId>--> |
|||
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>--> |
|||
<!-- </dependency>--> |
|||
<dependency> |
|||
<groupId>com.yomahub</groupId> |
|||
<artifactId>tlog-feign-spring-boot-starter</artifactId> |
|||
<version>${tlog.version}</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.yomahub</groupId> |
|||
<artifactId>tlog-web-spring-boot-starter</artifactId> |
|||
<version>${tlog.version}</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>junit</groupId> |
|||
<artifactId>junit</artifactId> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<dependencyManagement> |
|||
<dependencies> |
|||
<!-- springboot的依赖 --> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-dependencies</artifactId> |
|||
<version>${spring-boot.version}</version> |
|||
<type>pom</type> |
|||
<scope>import</scope> |
|||
</dependency> |
|||
<!-- springCloud的依赖 --> |
|||
<dependency> |
|||
<groupId>org.springframework.cloud</groupId> |
|||
<artifactId>spring-cloud-dependencies</artifactId> |
|||
<version>${spring-cloud.version}</version> |
|||
<type>pom</type> |
|||
<scope>import</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.alibaba.cloud</groupId> |
|||
<artifactId>spring-cloud-alibaba-dependencies</artifactId> |
|||
<version>${spring-cloud-alibaba.version}</version> |
|||
<type>pom</type> |
|||
<scope>import</scope> |
|||
</dependency> |
|||
|
|||
<!-- log4j的依赖 --> |
|||
<dependency> |
|||
<groupId>log4j</groupId> |
|||
<artifactId>log4j</artifactId> |
|||
<version>${log4j.version}</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.slf4j</groupId> |
|||
<artifactId>slf4j-api</artifactId> |
|||
<version>${slf4j.version}</version> |
|||
</dependency> |
|||
|
|||
|
|||
</dependencies> |
|||
</dependencyManagement> |
|||
</project> |
@ -0,0 +1,19 @@ |
|||
package com.yomahub.tlog.example.feign; |
|||
|
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; |
|||
import org.springframework.cloud.openfeign.EnableFeignClients; |
|||
import org.springframework.scheduling.annotation.EnableAsync; |
|||
|
|||
@SpringBootApplication |
|||
@EnableFeignClients |
|||
//@EnableDiscoveryClient
|
|||
@EnableAsync |
|||
public class TLogFeignConsumerRunner { |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(TLogFeignConsumerRunner.class, args); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.yomahub.tlog.example.feign.aop; |
|||
|
|||
import java.lang.annotation.*; |
|||
|
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
@Target({ElementType.METHOD}) |
|||
@Documented |
|||
public @interface RedisLimit { |
|||
/** |
|||
* 资源的key,唯一 |
|||
* 作用:不同的接口,不同的流量控制 |
|||
*/ |
|||
String key() default ""; |
|||
|
|||
/** |
|||
* 最多的访问限制次数 |
|||
*/ |
|||
long permitsPerSecond() default 2; |
|||
|
|||
/** |
|||
* 过期时间也可以理解为单位时间,单位秒,默认60 |
|||
*/ |
|||
long expire() default 60; |
|||
|
|||
|
|||
/** |
|||
* 得不到令牌的提示语 |
|||
*/ |
|||
String msg() default "系统繁忙,请稍后再试."; |
|||
} |
@ -0,0 +1,117 @@ |
|||
package com.yomahub.tlog.example.feign.aop; |
|||
|
|||
import com.yomahub.tlog.example.feign.exception.RedisLimitException; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.commons.lang.StringUtils; |
|||
import org.aspectj.lang.JoinPoint; |
|||
import org.aspectj.lang.annotation.Aspect; |
|||
import org.aspectj.lang.annotation.Before; |
|||
import org.aspectj.lang.annotation.Pointcut; |
|||
import org.aspectj.lang.reflect.MethodSignature; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.core.io.ClassPathResource; |
|||
import org.springframework.data.redis.core.StringRedisTemplate; |
|||
import org.springframework.data.redis.core.script.DefaultRedisScript; |
|||
import org.springframework.data.redis.core.script.RedisScript; |
|||
import org.springframework.scripting.support.ResourceScriptSource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.annotation.PostConstruct; |
|||
import java.lang.reflect.Method; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* Limit AOP |
|||
*/ |
|||
@Slf4j |
|||
@Aspect |
|||
@Component |
|||
public class RedisLimitAop { |
|||
|
|||
@Autowired |
|||
private StringRedisTemplate stringRedisTemplate; |
|||
|
|||
|
|||
@Pointcut("@annotation(com.yomahub.tlog.example.feign.aop.RedisLimit)") |
|||
private void check() { |
|||
|
|||
} |
|||
|
|||
private DefaultRedisScript<Long> redisScript; |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
redisScript = new DefaultRedisScript<>(); |
|||
redisScript.setResultType(Long.class); |
|||
redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("rateLimiter.lua"))); |
|||
} |
|||
|
|||
|
|||
@Before("check()") |
|||
public void before(JoinPoint joinPoint) { |
|||
MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
|||
Method method = signature.getMethod(); |
|||
|
|||
//拿到RedisLimit注解,如果存在则说明需要限流
|
|||
RedisLimit redisLimit = method.getAnnotation(RedisLimit.class); |
|||
|
|||
if (redisLimit != null) { |
|||
//获取redis的key
|
|||
String key = redisLimit.key(); |
|||
String className = method.getDeclaringClass().getName(); |
|||
String name = method.getName(); |
|||
|
|||
String limitKey = key + className + method.getName(); |
|||
|
|||
log.info(limitKey); |
|||
|
|||
if (StringUtils.isEmpty(key)) { |
|||
throw new RedisLimitException("key cannot be null"); |
|||
} |
|||
|
|||
long limit = redisLimit.permitsPerSecond(); |
|||
|
|||
long expire = redisLimit.expire(); |
|||
|
|||
List<String> keys = new ArrayList<>(); |
|||
keys.add(key); |
|||
|
|||
Long count = stringRedisTemplate.execute(redisScript, keys, String.valueOf(limit), String.valueOf(expire)); |
|||
|
|||
log.info("Access try count is {} for key={}", count, key); |
|||
|
|||
if (count != null && count == 0) { |
|||
log.debug("获取key失败,key为{}", key); |
|||
throw new RedisLimitException(redisLimit.msg()); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
// /**
|
|||
// * 构建redis lua脚本
|
|||
// *
|
|||
// * @return
|
|||
// */
|
|||
// private String buildLuaScript() {
|
|||
// StringBuilder luaString = new StringBuilder();
|
|||
// luaString.append("local key = KEYS[1]");
|
|||
// //获取ARGV内参数Limit
|
|||
// luaString.append("\nlocal limit = tonumber(ARGV[1])");
|
|||
// //获取key的次数
|
|||
// luaString.append("\nlocal curentLimit = tonumber(redis.call('get', key) or '0')");
|
|||
// luaString.append("\nif curentLimit + 1 > limit then");
|
|||
// luaString.append("\nreturn 0");
|
|||
// luaString.append("\nelse");
|
|||
// //自增长 1
|
|||
// luaString.append("\n redis.call('INCRBY', key, 1)");
|
|||
// //设置过期时间
|
|||
// luaString.append("\nredis.call('EXPIRE', key, ARGV[2])");
|
|||
// luaString.append("\nend");
|
|||
// return luaString.toString();
|
|||
// }
|
|||
//
|
|||
|
|||
|
|||
} |
@ -0,0 +1,41 @@ |
|||
package com.yomahub.tlog.example.feign.configuration; |
|||
|
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 现在拦截加密的日志有三类: |
|||
* 1,身份证 |
|||
* 2,姓名 |
|||
* 3,身份证号 |
|||
* 加密的规则后续可以优化在配置文件中 |
|||
**/ |
|||
public class Log4j2Rule { |
|||
|
|||
/** |
|||
* 正则匹配 关键词 类别 |
|||
*/ |
|||
public static Map<String, String> regularMap = new HashMap<>(); |
|||
/** |
|||
* TODO 可配置 |
|||
* 此项可以后期放在配置项中 |
|||
*/ |
|||
public static final String USER_NAME_STR = "Name,name,联系人,姓名"; |
|||
public static final String USER_IDCARD_STR = "empCard,idCard,身份证,证件号"; |
|||
public static final String USER_PHONE_STR = "mobile,Phone,phone,电话,手机"; |
|||
|
|||
/** |
|||
* 正则匹配,自己根据业务要求自定义 |
|||
*/ |
|||
private static String IDCARD_REGEXP = "(\\d{17}[0-9Xx]|\\d{14}[0-9Xx])"; |
|||
private static String USERNAME_REGEXP = "[\\u4e00-\\u9fa5]{2,4}"; |
|||
private static String PHONE_REGEXP = "(?<!\\d)(?:(?:1[3456789]\\d{9})|(?:861[356789]\\d{9}))(?!\\d)"; |
|||
|
|||
static { |
|||
regularMap.put(USER_NAME_STR, USERNAME_REGEXP); |
|||
regularMap.put(USER_IDCARD_STR, IDCARD_REGEXP); |
|||
regularMap.put(USER_PHONE_STR, PHONE_REGEXP); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.yomahub.tlog.example.feign.configuration; |
|||
|
|||
|
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
|||
import org.springframework.data.redis.core.RedisTemplate; |
|||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; |
|||
import org.springframework.data.redis.serializer.StringRedisSerializer; |
|||
|
|||
/** |
|||
* RedisConfig |
|||
* @date 2023/3/10 21:43 |
|||
*/ |
|||
@Configuration |
|||
public class RedisConfig { |
|||
|
|||
@Bean |
|||
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { |
|||
RedisTemplate<String, Object> template = new RedisTemplate<>(); |
|||
template.setConnectionFactory(factory); |
|||
// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
|
|||
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); |
|||
template.setValueSerializer(serializer); |
|||
// 使用StringRedisSerializer来序列化和反序列化redis的key值
|
|||
template.setKeySerializer(new StringRedisSerializer()); |
|||
template.afterPropertiesSet(); |
|||
|
|||
return template; |
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,29 @@ |
|||
package com.yomahub.tlog.example.feign.controller; |
|||
|
|||
|
|||
import com.yomahub.tlog.example.feign.aop.RedisLimit; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
/** |
|||
* SpringBoot如何用redis限流? |
|||
* 可以这样玩! |
|||
*/ |
|||
@Slf4j |
|||
@RestController |
|||
@RequestMapping("/limit/redis") |
|||
public class LimitRedisController { |
|||
|
|||
/** |
|||
* 基于Redis AOP限流 |
|||
*/ |
|||
@GetMapping("/test") |
|||
@RedisLimit(key = "redis-limit:test", permitsPerSecond = 2, expire = 1, msg = "当前排队人数较多,请稍后再试!") |
|||
public String test() { |
|||
log.info("限流成功。。。"); |
|||
return "ok"; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,29 @@ |
|||
package com.yomahub.tlog.example.feign.exception; |
|||
import com.yomahub.tlog.example.feign.vo.ResultInfo; |
|||
import org.springframework.web.bind.annotation.ExceptionHandler; |
|||
import org.springframework.web.bind.annotation.RestControllerAdvice; |
|||
|
|||
@RestControllerAdvice// 声明这个类为全局异常处理器
|
|||
public class GlobalExceptionHandler { |
|||
|
|||
|
|||
@ExceptionHandler(RedisLimitException.class) // 声明当前方法要处理的异常类型
|
|||
public ResultInfo handlerCustomException(RedisLimitException e) { |
|||
//1. 打印日志
|
|||
// e.printStackTrace();
|
|||
|
|||
//2. 给前端提示
|
|||
return ResultInfo.error(e.getMessage()); |
|||
} |
|||
|
|||
|
|||
//非预期异常 对于他们,我们直接捕获,捕获完了,记录日志, 给前端一个假提示
|
|||
@ExceptionHandler(Exception.class) |
|||
public ResultInfo handlerException(Exception e) { |
|||
//1. 打印日志
|
|||
e.printStackTrace(); |
|||
|
|||
//2. 给前端提示
|
|||
return ResultInfo.error("当前系统异常"); |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
package com.yomahub.tlog.example.feign.exception; |
|||
|
|||
|
|||
/** |
|||
* Redis限流自定义异常 |
|||
* @date 2023/3/10 21:43 |
|||
*/ |
|||
public class RedisLimitException extends RuntimeException{ |
|||
public RedisLimitException(String msg) { |
|||
super( msg ); |
|||
} |
|||
} |
@ -0,0 +1,28 @@ |
|||
package com.yomahub.tlog.example.feign.vo; |
|||
|
|||
|
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
|
|||
@Getter |
|||
@Setter |
|||
public class ResultInfo<T> { |
|||
|
|||
private String message; |
|||
private String code; |
|||
private T data; |
|||
|
|||
|
|||
public ResultInfo(String message, String code, T data) { |
|||
this.message = message; |
|||
this.code = code; |
|||
this.data = data; |
|||
} |
|||
|
|||
public static ResultInfo error(String message) { |
|||
return new ResultInfo(message,"502",null); |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,19 @@ |
|||
spring.application.name=tlog-logback-feign-consumer |
|||
server.port=3111 |
|||
#eureka.client.service-url.defaultZone=http://127.0.0.1:1111/eureka/ |
|||
|
|||
tlog.pattern=[$currIp][$spanId][$traceId] |
|||
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 |
|||
|
|||
http.connectTimeOutMillis=8000 |
|||
http.readTimeOutMillis=8000 |
|||
|
|||
spring.task.execution.pool.core-size=5 |
|||
spring.task.execution.pool.max-size=50 |
|||
spring.task.execution.pool.queue-capacity=200 |
|||
spring.task.execution.thread-name-prefix=woniugege- |
|||
|
|||
|
|||
spring.redis.host=192.168.56.10 |
|||
spring.redis.password=123456 |
|||
spring.redis.port=6379 |
@ -0,0 +1,16 @@ |
|||
--获取KEY |
|||
local key = KEYS[1] |
|||
|
|||
local limit = tonumber(ARGV[1]) |
|||
|
|||
local curentLimit = tonumber(redis.call('get', key) or "0") |
|||
|
|||
if curentLimit + 1 > limit |
|||
then return 0 |
|||
else |
|||
-- 自增长 1 |
|||
redis.call('INCRBY', key, 1) |
|||
-- 设置过期时间 |
|||
redis.call('EXPIRE', key, ARGV[2]) |
|||
return curentLimit + 1 |
|||
end |
Binary file not shown.
@ -0,0 +1,19 @@ |
|||
spring.application.name=tlog-logback-feign-consumer |
|||
server.port=3111 |
|||
#eureka.client.service-url.defaultZone=http://127.0.0.1:1111/eureka/ |
|||
|
|||
tlog.pattern=[$currIp][$spanId][$traceId] |
|||
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 |
|||
|
|||
http.connectTimeOutMillis=8000 |
|||
http.readTimeOutMillis=8000 |
|||
|
|||
spring.task.execution.pool.core-size=5 |
|||
spring.task.execution.pool.max-size=50 |
|||
spring.task.execution.pool.queue-capacity=200 |
|||
spring.task.execution.thread-name-prefix=woniugege- |
|||
|
|||
|
|||
spring.redis.host=192.168.56.10 |
|||
spring.redis.password=123456 |
|||
spring.redis.port=6379 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,16 @@ |
|||
--获取KEY |
|||
local key = KEYS[1] |
|||
|
|||
local limit = tonumber(ARGV[1]) |
|||
|
|||
local curentLimit = tonumber(redis.call('get', key) or "0") |
|||
|
|||
if curentLimit + 1 > limit |
|||
then return 0 |
|||
else |
|||
-- 自增长 1 |
|||
redis.call('INCRBY', key, 1) |
|||
-- 设置过期时间 |
|||
redis.call('EXPIRE', key, ARGV[2]) |
|||
return curentLimit + 1 |
|||
end |
@ -0,0 +1,136 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="Spring" name="Spring"> |
|||
<configuration /> |
|||
</facet> |
|||
<facet type="web" name="Web"> |
|||
<configuration> |
|||
<webroots /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> |
|||
<output url="file://$MODULE_DIR$/target/classes" /> |
|||
<output-test url="file://$MODULE_DIR$/target/test-classes" /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/target" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.9" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.24" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.24" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.24" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.17.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.3.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-log4j2:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.11.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.11.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-jul:2.11.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.28" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.guava:guava:30.1-jre" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.4" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.10.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.10.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.10.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.9.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.8.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.39.Final" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.12.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.7.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.60" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.60" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" /> |
|||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.1.3.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.1.6.RELEASE" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.2.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.2.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.2.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.6" level="project" /> |
|||
<orderEntry type="library" scope="RUNTIME" name="Maven: commons-configuration:commons-configuration:1.8" level="project" /> |
|||
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" /> |
|||
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.9" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-feign-spring-boot-starter:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-spring-boot-configuration:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-feign:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-core:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.22.0-GA" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.alibaba:QLExpress:3.2.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-task:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-httpclient:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-common:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> |
|||
<orderEntry type="library" name="Maven: cn.hutool:hutool-core:5.8.6" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.alibaba:transmittable-thread-local:2.12.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-okhttp:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.8.1" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.13.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-hutool-http:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-forest:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-rest-template:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-web-spring-boot-starter:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.yomahub:tlog-webroot:1.5.0" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.8" level="project" /> |
|||
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> |
|||
</component> |
|||
</module> |
Loading…
Reference in new issue