AE86 5 роки тому
батько
коміт
dd8d815a45

+ 3 - 2
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/OperationCallBack.java

@@ -2,6 +2,7 @@ package org.dbsyncer.manager.config;
 
 import org.dbsyncer.manager.template.Callback;
 import org.dbsyncer.storage.StorageService;
+import org.dbsyncer.storage.enums.StorageEnum;
 
 import java.util.Map;
 
@@ -9,11 +10,11 @@ public class OperationCallBack implements Callback {
 
     private StorageService storageService;
 
-    private String type;
+    private StorageEnum type;
 
     private Map params;
 
-    public OperationCallBack(StorageService storageService, String type, Map params) {
+    public OperationCallBack(StorageService storageService, StorageEnum type, Map params) {
         this.storageService = storageService;
         this.type = type;
         this.params = params;

+ 6 - 4
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/OperationTemplate.java

@@ -8,11 +8,13 @@ import org.dbsyncer.manager.config.OperationCallBack;
 import org.dbsyncer.manager.config.OperationConfig;
 import org.dbsyncer.manager.config.QueryConfig;
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
-import org.dbsyncer.manager.template.*;
+import org.dbsyncer.manager.template.AbstractTemplate;
+import org.dbsyncer.manager.template.GroupStrategy;
+import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.util.ConfigModelUtil;
 import org.dbsyncer.storage.StorageService;
-import org.dbsyncer.storage.constant.StorageConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -79,7 +81,7 @@ public final class OperationTemplate extends AbstractTemplate {
         logger.debug("params:{}", params);
         Handler handler = config.getHandler();
         Assert.notNull(handler, "Handler can not be null.");
-        handler.execute(new OperationCallBack(storageService, StorageConstant.CONFIG, params));
+        handler.execute(new OperationCallBack(storageService, StorageEnum.CONFIG, params));
 
         // 3、缓存
         GroupStrategyEnum strategy = getDefaultStrategy(config);
@@ -115,7 +117,7 @@ public final class OperationTemplate extends AbstractTemplate {
             }
         }
         cacheService.remove(id);
-        storageService.remove(StorageConstant.CONFIG, id);
+        storageService.remove(StorageEnum.CONFIG, id);
     }
 
     private String getGroupId(ConfigModel model, GroupStrategyEnum strategy) {

+ 2 - 1
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java

@@ -16,6 +16,7 @@ import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
 import org.dbsyncer.storage.StorageService;
 import org.dbsyncer.storage.constant.ConfigConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.query.Query;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,7 +56,7 @@ public final class PreloadTemplate extends AbstractTemplate implements Applicati
         Query query = new Query();
         String filterType = config.getFilterType();
         query.put(ConfigConstant.CONFIG_MODEL_TYPE, filterType);
-        List<Map> list = storageService.queryConfig(query);
+        List<Map> list = storageService.query(StorageEnum.CONFIG, query);
         boolean empty = CollectionUtils.isEmpty(list);
         logger.info("PreLoad {}:{}", filterType, empty ? 0 : list.size());
         if (!empty) {

+ 23 - 11
dbsyncer-storage/src/main/java/org/dbsyncer/storage/AbstractStorageService.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.storage;
 
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.query.Query;
 import org.dbsyncer.storage.strategy.Strategy;
 import org.slf4j.Logger;
@@ -24,7 +25,7 @@ public abstract class AbstractStorageService implements StorageService, Applicat
 
     private Map<String, Strategy> map;
 
-    public abstract List<Map> query(String collectionId, Query query);
+    public abstract List<Map> select(String collectionId, Query query);
 
     public abstract void insert(String collectionId, Map params) throws IOException;
 
@@ -38,13 +39,23 @@ public abstract class AbstractStorageService implements StorageService, Applicat
     }
 
     @Override
-    public void add(String type, Map params) {
+    public List<Map> query(StorageEnum type, Query query) {
+        return query(type, query, null);
+    }
+
+    @Override
+    public List<Map> query(StorageEnum type, Query query, String collectionId) {
+        collectionId = getCollectionId(type, collectionId);
+        return select(collectionId, query);
+    }
+
+    @Override
+    public void add(StorageEnum type, Map params) {
         add(type, params, null);
     }
 
     @Override
-    public void add(String type, Map params, String collectionId) {
-        Assert.hasText(type, "Type can not be empty.");
+    public void add(StorageEnum type, Map params, String collectionId) {
         Assert.notNull(params, "Params can not be null.");
         logger.debug("collectionId:{}, params:{}", collectionId, params);
         try {
@@ -56,12 +67,12 @@ public abstract class AbstractStorageService implements StorageService, Applicat
     }
 
     @Override
-    public void edit(String type, Map params) {
+    public void edit(StorageEnum type, Map params) {
         edit(type, params, null);
     }
 
     @Override
-    public void edit(String type, Map params, String collectionId) {
+    public void edit(StorageEnum type, Map params, String collectionId) {
         Assert.notNull(params, "Params can not be null.");
         logger.debug("collectionId:{}, params:{}", collectionId, params);
         try {
@@ -73,12 +84,12 @@ public abstract class AbstractStorageService implements StorageService, Applicat
     }
 
     @Override
-    public void remove(String type, String id) {
+    public void remove(StorageEnum type, String id) {
         remove(type, id, null);
     }
 
     @Override
-    public void remove(String type, String id, String collectionId) {
+    public void remove(StorageEnum type, String id, String collectionId) {
         Assert.hasText(id, "ID can not be null.");
         logger.debug("collectionId:{}, id:{}", collectionId, id);
         try {
@@ -89,9 +100,10 @@ public abstract class AbstractStorageService implements StorageService, Applicat
         }
     }
 
-    private String getCollectionId(String type, String collectionId) {
-        Strategy strategy = map.get(type);
-        Assert.notNull(strategy, "Type does not exist.");
+    private String getCollectionId(StorageEnum type, String collectionId) {
+        Assert.notNull(type, "StorageEnum can not be null.");
+        Strategy strategy = map.get(type.getType().concat("Strategy"));
+        Assert.notNull(strategy, "Strategy does not exist.");
         return strategy.createCollectionId(collectionId);
     }
 

+ 11 - 8
dbsyncer-storage/src/main/java/org/dbsyncer/storage/StorageService.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.storage;
 
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.query.Query;
 
 import java.util.List;
@@ -12,18 +13,20 @@ import java.util.Map;
  */
 public interface StorageService {
 
-    List<Map> queryConfig(Query query);
+    List<Map> query(StorageEnum type, Query query);
 
-    void add(String type, Map params);
+    List<Map> query(StorageEnum type, Query query, String collectionId);
 
-    void add(String type, Map params, String collectionId);
+    void add(StorageEnum type, Map params);
 
-    void edit(String type, Map params);
+    void add(StorageEnum type, Map params, String collectionId);
 
-    void edit(String type, Map params, String collectionId);
+    void edit(StorageEnum type, Map params);
 
-    void remove(String type, String id);
+    void edit(StorageEnum type, Map params, String collectionId);
 
-    void remove(String type, String id, String collectionId);
+    void remove(StorageEnum type, String id);
 
-}
+    void remove(StorageEnum type, String id, String collectionId);
+
+}

+ 32 - 0
dbsyncer-storage/src/main/java/org/dbsyncer/storage/enums/StorageEnum.java

@@ -0,0 +1,32 @@
+package org.dbsyncer.storage.enums;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2019/11/16 20:31
+ */
+public enum StorageEnum {
+
+    /**
+     * 配置:连接器、驱动、映射关系、同步信息、系统配置
+     */
+    CONFIG("config"),
+    /**
+     * 日志:连接器、驱动、映射关系、同步信息、系统日志
+     */
+    LOG("log"),
+    /**
+     * 数据:全量或增量数据
+     */
+    DATA("data");
+
+    private String type;
+
+    StorageEnum(String type) {
+        this.type = type;
+    }
+
+    public String getType() {
+        return type;
+    }
+}

+ 3 - 5
dbsyncer-storage/src/main/java/org/dbsyncer/storage/strategy/impl/ConfigStrategy.java

@@ -1,11 +1,11 @@
 package org.dbsyncer.storage.strategy.impl;
 
-import org.dbsyncer.storage.constant.StrategyConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.strategy.Strategy;
 import org.springframework.stereotype.Component;
 
 /**
- * 配置:连接器、驱动、运行状态
+ * 配置:Connector、Mapping、TableGroup、Meta、SysConfig
  *
  * @author AE86
  * @version 1.0.0
@@ -14,10 +14,8 @@ import org.springframework.stereotype.Component;
 @Component
 public class ConfigStrategy implements Strategy {
 
-    private static final String COLLECTION_ID = StrategyConstant.CONFIG;
-
     @Override
     public String createCollectionId(String id) {
-        return COLLECTION_ID;
+        return StorageEnum.CONFIG.getType();
     }
 }

+ 4 - 4
dbsyncer-storage/src/main/java/org/dbsyncer/storage/strategy/impl/DataStrategy.java

@@ -1,6 +1,6 @@
 package org.dbsyncer.storage.strategy.impl;
 
-import org.dbsyncer.storage.constant.StrategyConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.strategy.Strategy;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
@@ -8,7 +8,7 @@ import org.springframework.util.Assert;
 import java.io.File;
 
 /**
- * 数据:驱动实时同步数据
+ * 数据:全量或增量数据
  *
  * @author AE86
  * @version 1.0.0
@@ -17,12 +17,12 @@ import java.io.File;
 @Component
 public class DataStrategy implements Strategy {
 
-    private static final String COLLECTION_ID = StrategyConstant.DATA + File.separator;
+    private static final String COLLECTION_ID = StorageEnum.DATA.getType() + File.separator;
 
     @Override
     public String createCollectionId(String id) {
         Assert.hasText(id, "Id can not be empty.");
-        // 同步数据较多,根据不同的驱动生成集合ID: /data/123
+        // 同步数据较多,根据不同的驱动生成集合ID: data/123
         return COLLECTION_ID + id;
     }
 }

+ 3 - 5
dbsyncer-storage/src/main/java/org/dbsyncer/storage/strategy/impl/LogStrategy.java

@@ -1,11 +1,11 @@
 package org.dbsyncer.storage.strategy.impl;
 
-import org.dbsyncer.storage.constant.StrategyConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.strategy.Strategy;
 import org.springframework.stereotype.Component;
 
 /**
- * 日志:连接器、驱动、系统
+ * 日志:Connector、Mapping、TableGroup、Meta、系统日志
  *
  * @author AE86
  * @version 1.0.0
@@ -14,10 +14,8 @@ import org.springframework.stereotype.Component;
 @Component
 public class LogStrategy implements Strategy {
 
-    private static final String COLLECTION_ID = StrategyConstant.LOG;
-
     @Override
     public String createCollectionId(String id) {
-        return COLLECTION_ID;
+        return StorageEnum.LOG.getType();
     }
 }

+ 26 - 30
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/DiskStorageServiceImpl.java

@@ -8,7 +8,7 @@ import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.storage.AbstractStorageService;
 import org.dbsyncer.storage.StorageException;
 import org.dbsyncer.storage.constant.ConfigConstant;
-import org.dbsyncer.storage.constant.StrategyConstant;
+import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.lucene.Shard;
 import org.dbsyncer.storage.query.Param;
 import org.dbsyncer.storage.query.Query;
@@ -39,44 +39,38 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
 
     private Map<String, Shard> map = new ConcurrentHashMap();
 
-    // 获取相对路径:./data
-    private static final String PATH = "data";
+    // 相对路径:./data/
+    private static final String PATH = "data" + File.separator;
 
     @PostConstruct
     private void init() {
         try {
-            String currentPath = PATH + File.separator;
-            // 存放配置:连接器、驱动、运行状态
-            map.putIfAbsent(StrategyConstant.CONFIG, new Shard(currentPath + StrategyConstant.CONFIG));
-            // 存放日志:连接器、驱动、系统
-            map.putIfAbsent(StrategyConstant.LOG, new Shard(currentPath + StrategyConstant.LOG));
-        } catch (IOException e) {
-            throw new StorageException(e);
-        }
-    }
+            // 创建配置和日志索引shard
+            String config = StorageEnum.CONFIG.getType();
+            map.putIfAbsent(config, new Shard(PATH + config));
 
-    @Override
-    public List<Map> queryConfig(Query query) {
-        Shard shard = map.get(StrategyConstant.CONFIG);
-        try {
-            List<Param> params = query.getParams();
-            if (!CollectionUtils.isEmpty(params)) {
-                Param p = params.get(0);
-                Term term = new Term(p.getKey(), (String) p.getValue());
-                PrefixQuery q = new PrefixQuery(term);
-                return shard.prefixQuery(q);
-            }
+            String log = StorageEnum.LOG.getType();
+            map.putIfAbsent(log, new Shard(PATH + log));
         } catch (IOException e) {
-            logger.error(e.getMessage());
+            throw new StorageException(e);
         }
-        return Collections.emptyList();
     }
 
     @Override
-    public List<Map> query(String collectionId, Query query) {
+    public List<Map> select(String collectionId, Query query) {
         Shard shard = map.get(collectionId);
-        if (null != shard) {
-            return Collections.emptyList();
+        if(null != shard){
+            try {
+                List<Param> params = query.getParams();
+                if (!CollectionUtils.isEmpty(params)) {
+                    Param p = params.get(0);
+                    Term term = new Term(p.getKey(), (String) p.getValue());
+                    PrefixQuery q = new PrefixQuery(term);
+                    return shard.prefixQuery(q);
+                }
+            } catch (IOException e) {
+                logger.error(e.getMessage());
+            }
         }
         return Collections.emptyList();
     }
@@ -104,13 +98,15 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
 
     /**
      * 如果不存在分片则创建(线程安全)
+     *<p>/data/config</p>
+     *<p>/data/log</p>
+     *<p>/data/data/123</p>
      *
-     * @param collectionId /data/123
+     * @param collectionId
      * @throws IOException
      */
     private void createShardIfNotExist(String collectionId) throws IOException {
         if (null == map.get(collectionId)) {
-            // 存放数据:驱动实时同步数据, /data/${collectionId}
             map.putIfAbsent(collectionId, new Shard(PATH + collectionId));
         }
     }

+ 2 - 7
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/MysqlStorageServiceImpl.java

@@ -19,12 +19,7 @@ import java.util.Map;
 public class MysqlStorageServiceImpl extends AbstractStorageService {
 
     @Override
-    public List<Map> queryConfig(Query query) {
-        return null;
-    }
-
-    @Override
-    public List<Map> query(String collectionId, Query query) {
+    public List<Map> select(String collectionId, Query query) {
         return null;
     }
 
@@ -42,4 +37,4 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     public void delete(String collectionId, String id) throws IOException {
 
     }
-}
+}