diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml
index 1202416..cdd8ac8 100644
--- a/.idea/dataSources.local.xml
+++ b/.idea/dataSources.local.xml
@@ -5,7 +5,6 @@
#@
`
- true
master_key
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 956567a..fb241fd 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,7 +5,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -62,7 +83,7 @@
"WebServerToolWindowFactoryState": "false",
"git-widget-placeholder": "main",
"jdk.selected.JAVA_MODULE": "1.8",
- "last_opened_file_path": "D:/workspace/etl-cloud/etl-heihei/src/main/java",
+ "last_opened_file_path": "D:/workspace/etl-cloud/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
@@ -72,7 +93,7 @@
"project.structure.proportion": "0.17",
"project.structure.side.proportion": "0.29885057",
"settings.editor.selected.configurable": "preferences.lookFeel",
- "spring.configuration.checksum": "21940204b7449cbc44619bf9f15c4b27",
+ "spring.configuration.checksum": "1d871ffdc938601b3b3345b2b129e57c",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
@@ -91,6 +112,7 @@
+
@@ -100,6 +122,10 @@
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -122,22 +161,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -183,11 +206,11 @@
+
+
-
-
@@ -209,7 +232,8 @@
-
+
+
@@ -235,7 +259,15 @@
1719229225799
-
+
+
+ 1719230664247
+
+
+
+ 1719230664247
+
+
@@ -257,4 +289,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java
new file mode 100644
index 0000000..bb4d2ea
--- /dev/null
+++ b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/Limit.java
@@ -0,0 +1,26 @@
+package com.etl.data.source.common.config;
+
+import java.lang.annotation.*;
+import java.util.concurrent.TimeUnit;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+@Documented
+public @interface Limit {
+
+ // 资源key
+ String key() default "";
+
+ // 最多访问次数
+ double permitsPerSecond();
+
+ // 时间
+ long timeout();
+
+ // 时间类型
+ TimeUnit timeunit() default TimeUnit.MILLISECONDS;
+
+ // 提示信息
+ String msg() default "系统繁忙,请稍后再试";
+
+}
diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/RedisLimit.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/RedisLimit.java
deleted file mode 100644
index 532d7d8..0000000
--- a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/config/RedisLimit.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.etl.data.source.common.config;
-
-
-import com.etl.data.source.common.ennum.LimitType;
-
-import java.lang.annotation.*;
-
-@Target({ElementType.METHOD,ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Inherited
-@Documented
-public @interface RedisLimit {
-
- // 资源名称
- String name() default "";
-
- // 资源key
- String key() default "";
-
- // 前缀
- String prefix() default "";
-
- // 时间
- int period();
-
- // 最多访问次数
- int count();
-
- // 类型
- LimitType limitType() default LimitType.CUSTOM;
-
- // 提示信息
- String msg() default "系统繁忙,请稍后再试";
-
-}
diff --git a/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Person.java b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Person.java
new file mode 100644
index 0000000..507534f
--- /dev/null
+++ b/etl-data-source/el-data-source-common/src/main/java/com/etl/data/source/common/pojo/Person.java
@@ -0,0 +1,23 @@
+package com.etl.data.source.common.pojo;
+
+import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @ClassName Persion
+ * @Description 描述
+ * @Author ZeZhang.Liu
+ * @Date 2024/6/25 9:32
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Person {
+ private String name;
+
+ private Integer age;
+}
diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/Limit.class b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/Limit.class
new file mode 100644
index 0000000..e1414a7
Binary files /dev/null and b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/Limit.class differ
diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/RedisLimit.class b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/RedisLimit.class
deleted file mode 100644
index 40ea670..0000000
Binary files a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/config/RedisLimit.class and /dev/null differ
diff --git a/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/Person.class b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/Person.class
new file mode 100644
index 0000000..05db51a
Binary files /dev/null and b/etl-data-source/el-data-source-common/target/classes/com/etl/data/source/common/pojo/Person.class differ
diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java
new file mode 100644
index 0000000..c0d6572
--- /dev/null
+++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/LimitAspect.java
@@ -0,0 +1,52 @@
+package com.etl.data.source.server.aop;
+
+import com.etl.common.exception.LimitException;
+import com.etl.data.source.common.config.Limit;
+import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.RateLimiter;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+@Slf4j
+@Aspect
+@Component
+public class LimitAspect {
+
+ private final Map limitMap = Maps.newConcurrentMap();
+
+ @Around("@annotation(com.etl.data.source.common.config.Limit)")
+ public Object around(ProceedingJoinPoint pjp) throws Throwable {
+ MethodSignature signature = (MethodSignature)pjp.getSignature();
+ Method method = signature.getMethod();
+ //拿limit的注解
+ Limit limit = method.getAnnotation(Limit.class);
+ if (limit != null) {
+ //key作用:不同的接口,不同的流量控制
+ String key=limit.key();
+ RateLimiter rateLimiter;
+ //验证缓存是否有命中key
+ if (!limitMap.containsKey(key)) {
+ // 创建令牌桶
+ rateLimiter = RateLimiter.create(limit.permitsPerSecond());
+ limitMap.put(key, rateLimiter);
+ log.info("新建了令牌桶={},容量={}",key,limit.permitsPerSecond());
+ }
+ rateLimiter = limitMap.get(key);
+ // 拿令牌
+ boolean acquire = rateLimiter.tryAcquire(limit.timeout(), limit.timeunit());
+ // 拿不到命令,直接返回异常提示
+ if (!acquire) {
+ log.debug("令牌桶={},获取令牌失败",key);
+ throw new LimitException(limit.msg());
+ }
+ }
+ return pjp.proceed();
+ }
+
+}
diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/RedisLimitAspect.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/RedisLimitAspect.java
deleted file mode 100644
index 6421091..0000000
--- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/aop/RedisLimitAspect.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.etl.data.source.server.aop;
-
-import com.etl.common.exception.LimitException;
-import com.etl.data.source.common.config.RedisLimit;
-import com.etl.data.source.common.ennum.LimitType;
-import com.google.common.collect.ImmutableList;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.script.DefaultRedisScript;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.lang.reflect.Method;
-import java.util.Objects;
-
-
-@Slf4j
-@Aspect
-@Configuration
-public class RedisLimitAspect {
-
- private final RedisTemplate redisTemplate;
-
- public RedisLimitAspect(RedisTemplate redisTemplate) {
- this.redisTemplate = redisTemplate;
- }
-
- @Around("@annotation(com.etl.data.source.common.config.RedisLimit)")
- public Object around(ProceedingJoinPoint pjp){
- MethodSignature methodSignature = (MethodSignature)pjp.getSignature();
- Method method = methodSignature.getMethod();
- RedisLimit annotation = method.getAnnotation(RedisLimit.class);
- LimitType limitType = annotation.limitType();
-
- String name = annotation.name();
- String key;
-
- int period = annotation.period();
- int count = annotation.count();
-
- switch (limitType){
- case IP:
- key = getIpAddress();
- break;
- case CUSTOMER:
- key = annotation.key();
- break;
- default:
- key = StringUtils.upperCase(method.getName());
- }
- ImmutableList keys = ImmutableList.of(StringUtils.join(annotation.prefix(), key));
- try {
- String luaScript = buildLuaScript();
- DefaultRedisScript redisScript = new DefaultRedisScript<>(luaScript, Number.class);
- Number number = redisTemplate.execute(redisScript, keys, count, period);
- log.info("Access try count is {} for name = {} and key = {}", number, name, key);
- if(number != null && number.intValue() == 1){
- return pjp.proceed();
- }
- throw new LimitException(annotation.msg());
- }catch (Throwable e){
- if(e instanceof LimitException){
- log.debug("令牌桶={},获取令牌失败",key);
- throw new LimitException(e.getLocalizedMessage());
- }
- e.printStackTrace();
- throw new RuntimeException("服务器异常");
- }
- }
-
- public String buildLuaScript(){
- return "redis.replicate_commands(); local listLen,time" +
- "\nlistLen = redis.call('LLEN', KEYS[1])" +
- // 不超过最大值,则直接写入时间
- "\nif listLen and tonumber(listLen) < tonumber(ARGV[1]) then" +
- "\nlocal a = redis.call('TIME');" +
- "\nredis.call('LPUSH', KEYS[1], a[1]*1000000+a[2])" +
- "\nelse" +
- // 取出现存的最早的那个时间,和当前时间比较,看是小于时间间隔
- "\ntime = redis.call('LINDEX', KEYS[1], -1)" +
- "\nlocal a = redis.call('TIME');" +
- "\nif a[1]*1000000+a[2] - time < tonumber(ARGV[2])*1000000 then" +
- // 访问频率超过了限制,返回0表示失败
- "\nreturn 0;" +
- "\nelse" +
- "\nredis.call('LPUSH', KEYS[1], a[1]*1000000+a[2])" +
- "\nredis.call('LTRIM', KEYS[1], 0, tonumber(ARGV[1])-1)" +
- "\nend" +
- "\nend" +
- "\nreturn 1;";
- }
-
- public String getIpAddress(){
- HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
- String ip = request.getHeader("x-forwarded-for");
- if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
- ip = request.getHeader("Proxy-Client-IP");
- }
- if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
- ip = request.getHeader("WL-Client-IP");
- }
- if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
- ip = request.getRemoteAddr();
- }
- return ip;
- }
-
-}
diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java
index 96e2634..4c9e78e 100644
--- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java
+++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedisConfig.java
@@ -31,19 +31,6 @@ public class RedisConfig {
return jedisPool;
}
- @Bean
- public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
- RedisTemplate template = new RedisTemplate<>();
- template.setConnectionFactory(redisConnectionFactory);
- // 设置序列化器(如果需要)
- // 例如:
- // template.setKeySerializer(new StringRedisSerializer());
- // template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
-
- // ... 其他配置
-
- return template;
- }
}
diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedissonConfig.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedissonConfig.java
index 9a1358b..eba3f96 100644
--- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedissonConfig.java
+++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/config/RedissonConfig.java
@@ -6,6 +6,8 @@ import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
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;
/**
* @ClassName RedissonConfig
@@ -36,4 +38,19 @@ public class RedissonConfig {
return Redisson.create(config);
}
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate template = new RedisTemplate<>();
+ template.setConnectionFactory(redisConnectionFactory);
+
+ // 设置序列化器(如果需要)
+ // 例如:
+ // template.setKeySerializer(new StringRedisSerializer());
+ // template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
+
+ // ... 其他配置
+
+ return template;
+ }
}
diff --git a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java
index 0a36cbf..9d1fe4d 100644
--- a/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java
+++ b/etl-data-source/el-data-source-server/src/main/java/com/etl/data/source/server/controller/DatabaseController.java
@@ -1,7 +1,7 @@
package com.etl.data.source.server.controller;
import com.etl.common.result.Result;
-import com.etl.data.source.common.config.RedisLimit;
+import com.etl.data.source.common.config.Limit;
import com.etl.data.source.common.pojo.DatabaseConfig;
import com.etl.data.source.common.pojo.DatabaseRedis;
import com.etl.data.source.common.pojo.resq.ColumnInfo;
@@ -36,7 +36,7 @@ public class DatabaseController {
// POST请求映射到/test-database-connection路径
@PostMapping("/testDatabaseMysql")
@ApiOperation(value = "测试数据库连接")
- @RedisLimit(key = "cachingTest", count = 2, period = 2, msg = "当前排队人数较多,请稍后再试!")
+ @Limit(key = "testDatabaseMysql", permitsPerSecond = 1, timeout = 500, msg = "当前排队人数较多,请稍后再试!")
public Result testDatabaseConnection(@Valid @RequestBody DatabaseConfig config) {
String string = databaseService.testDatabaseConnection(config);
if (string.equals("ok")) {
diff --git a/etl-data-source/el-data-source-server/src/test/java/com/etl/data/source/server/ElDataSourceServerApplicationTests.java b/etl-data-source/el-data-source-server/src/test/java/com/etl/data/source/server/ElDataSourceServerApplicationTests.java
index 00fb8a7..f6582c4 100644
--- a/etl-data-source/el-data-source-server/src/test/java/com/etl/data/source/server/ElDataSourceServerApplicationTests.java
+++ b/etl-data-source/el-data-source-server/src/test/java/com/etl/data/source/server/ElDataSourceServerApplicationTests.java
@@ -1,5 +1,6 @@
package com.etl.data.source.server;
+import com.etl.data.source.common.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.*;
@@ -7,33 +8,53 @@ import java.util.*;
@SpringBootTest
class ElDataSourceServerApplicationTests {
- @Test
- void contextLoads() {
-// List list = Arrays.asList("a", "b", "c");
-// list.forEach(item -> System.out.println("Lambda方式遍历元素: "+item));
- //创建一个未排序的列表
- List list = Arrays.asList("b", "a", "c","aa");
- //使用传统方式进行排序
-// Collections.sort(list, new Comparator() {
-// @Override
-// public int compare(String o1, String o2) {
-// return o1.compareTo(o2);
-// }
-// });
-//
-// System.out.println("传统方式排序结果:"+list);
-// list.sort((s1,s2) -> s1.compareTo(s2));
-// System.out.println("Lambda方式排序结果:"+list);
- //创建一个新的列表来存储过滤后的结果
-// ArrayList filteredLis = new ArrayList<>();
-// //使用传统方式过滤
-// for (String item : list) {
-// if(item.startsWith("a")){
-// filteredLis.add(item);
-// }
-// }
-// //打印过滤后的列表
-// System.out.println("传统过滤结果:"+filteredLis);
+ // 假设我们有一个简单的Person类,包含姓名和年龄
+ static class Person {
+ String name;
+ Integer age;
+
+ Person(String name, Integer age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Person{" +
+ "name='" + name + '\'' +
+ ", age=" + age +
+ '}';
+ }
+ }
+
+ public static void main(String[] args) {
+ // 示例数据集
+ List people = new ArrayList<>();
+ people.add(new Person("Alice", 25));
+ people.add(new Person("Bob", null)); // 缺失值
+ people.add(new Person("Charlie", 30));
+ people.add(new Person("Alice", 25)); // 重复数据
+
+ // 1. 处理缺失值
+ List cleanedPeople = new ArrayList<>();
+ for (Person person : people) {
+ if (person.age == null) {
+ // 假设我们用平均值或某个默认值替换缺失的年龄
+ // 这里简单起见,我们设置为0
+ person.age = 0;
+ }
+ cleanedPeople.add(person);
+ }
+
+ // 2. 处理重复数据
+ Set uniquePeople = new LinkedHashSet<>(cleanedPeople); // LinkedHashSet保持插入顺序
+ cleanedPeople.clear();
+ cleanedPeople.addAll(uniquePeople);
+
+ // 3. 数据格式化(这里只是一个简单的打印示例)
+ for (Person person : cleanedPeople) {
+ System.out.println(person);
+ }
}
}
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/LimitAspect.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/LimitAspect.class
new file mode 100644
index 0000000..c5300bb
Binary files /dev/null and b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/LimitAspect.class differ
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect$1.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect$1.class
deleted file mode 100644
index dcab486..0000000
Binary files a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect$1.class and /dev/null differ
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect.class
deleted file mode 100644
index 97c1293..0000000
Binary files a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/aop/RedisLimitAspect.class and /dev/null differ
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class
index 4033d2f..3c45f7e 100644
Binary files a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class and b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedisConfig.class differ
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedissonConfig.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedissonConfig.class
index 86772bb..a9fe24b 100644
Binary files a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedissonConfig.class and b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/config/RedissonConfig.class differ
diff --git a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class
index 1a9fc84..ac6bf61 100644
Binary files a/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class and b/etl-data-source/el-data-source-server/target/classes/com/etl/data/source/server/controller/DatabaseController.class differ
diff --git a/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class b/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class
new file mode 100644
index 0000000..163eaf8
Binary files /dev/null and b/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests$Person.class differ
diff --git a/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests.class b/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests.class
index 1729aef..283cfce 100644
Binary files a/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests.class and b/etl-data-source/el-data-source-server/target/test-classes/com/etl/data/source/server/ElDataSourceServerApplicationTests.class differ