AE86 1 gadu atpakaļ
vecāks
revīzija
33f4d27606
15 mainītis faili ar 167 papildinājumiem un 126 dzēšanām
  1. 5 0
      dbsyncer-common/src/main/java/org/dbsyncer/common/util/StringUtil.java
  2. 0 65
      dbsyncer-connector/dbsyncer-connector-base/src/main/java/org/dbsyncer/connector/ConnectorConfiguration.java
  3. 17 15
      dbsyncer-connector/dbsyncer-connector-base/src/main/java/org/dbsyncer/connector/ConnectorFactory.java
  4. 7 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLConnector.java
  5. 31 24
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/storage/MySQLStorageService.java
  6. 0 1
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/META-INF/services/org.dbsyncer.sdk.spi.StorageService
  7. 0 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_config.sql
  8. 0 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_data.sql
  9. 0 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_log.sql
  10. 4 1
      dbsyncer-manager/src/main/java/org/dbsyncer/manager/impl/PreloadTemplate.java
  11. 10 0
      dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/spi/ConnectorService.java
  12. 6 0
      dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/spi/StorageService.java
  13. 72 2
      dbsyncer-storage/src/main/java/org/dbsyncer/storage/StorageSupportConfiguration.java
  14. 10 13
      dbsyncer-storage/src/main/java/org/dbsyncer/storage/impl/DiskStorageService.java
  15. 5 5
      dbsyncer-web/src/main/resources/application.properties

+ 5 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/util/StringUtil.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.common.util;
 
 import org.apache.commons.lang3.StringUtils;
@@ -8,6 +11,8 @@ public abstract class StringUtil {
 
     public static final String SYMBOL = "-";
 
+    public static final String UNDERLINE = "_";
+
     public static final String COLON = ":";
 
     public static final String SPACE = " ";

+ 0 - 65
dbsyncer-connector/dbsyncer-connector-base/src/main/java/org/dbsyncer/connector/ConnectorConfiguration.java

@@ -1,65 +0,0 @@
-/**
- * DBSyncer Copyright 2020-2023 All Rights Reserved.
- */
-package org.dbsyncer.connector;
-
-import org.dbsyncer.sdk.spi.ConnectorService;
-import org.dbsyncer.sdk.spi.StorageService;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-
-import java.beans.Introspector;
-import java.util.ServiceLoader;
-
-/**
- * 连接器配置
- *
- * @Author AE86
- * @Version 1.0.0
- * @Date 2019-09-19 23:17
- */
-@Service
-public class ConnectorConfiguration implements BeanDefinitionRegistryPostProcessor {
-
-    @Override
-    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
-        loadConnectorServices(beanDefinitionRegistry);
-//        loadStorageServices(beanDefinitionRegistry);
-    }
-
-    private void loadStorageServices(BeanDefinitionRegistry beanDefinitionRegistry) {
-        ServiceLoader<StorageService> services = ServiceLoader.load(StorageService.class, Thread.currentThread().getContextClassLoader());
-        for (StorageService s : services) {
-            BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(s.getClass()).getBeanDefinition();
-            String beanClassName = beanDefinition.getBeanClassName();
-            Assert.state(beanClassName != null, "No bean class name set");
-            String shortClassName = ClassUtils.getShortName(beanClassName);
-            String decapitalize = Introspector.decapitalize(shortClassName);
-            beanDefinitionRegistry.registerBeanDefinition(decapitalize, beanDefinition);
-        }
-    }
-
-    private void loadConnectorServices(BeanDefinitionRegistry beanDefinitionRegistry) {
-        ServiceLoader<ConnectorService> services = ServiceLoader.load(ConnectorService.class, Thread.currentThread().getContextClassLoader());
-        for (ConnectorService s : services) {
-            BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(s.getClass()).getBeanDefinition();
-            String beanClassName = beanDefinition.getBeanClassName();
-            Assert.state(beanClassName != null, "No bean class name set");
-            String shortClassName = ClassUtils.getShortName(beanClassName);
-            String decapitalize = Introspector.decapitalize(shortClassName);
-            beanDefinitionRegistry.registerBeanDefinition(decapitalize, beanDefinition);
-        }
-    }
-
-    @Override
-    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
-
-    }
-}

+ 17 - 15
dbsyncer-connector/dbsyncer-connector-base/src/main/java/org/dbsyncer/connector/ConnectorFactory.java

@@ -16,17 +16,19 @@ import org.dbsyncer.sdk.model.ConnectorConfig;
 import org.dbsyncer.sdk.model.MetaInfo;
 import org.dbsyncer.sdk.model.Table;
 import org.dbsyncer.sdk.spi.ConnectorService;
+import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.DisposableBean;
-import org.springframework.context.ApplicationContext;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.ServiceLoader;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -38,7 +40,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * @Date 2019-09-18 23:30
  */
 @Component
-public class ConnectorFactory implements DisposableBean {
+public class ConnectorFactory implements BeanDefinitionRegistryPostProcessor, DisposableBean {
 
     private final Map<String, ConnectorInstance> pool = new ConcurrentHashMap<>();
 
@@ -46,20 +48,20 @@ public class ConnectorFactory implements DisposableBean {
 
     private final Set<String> connectorTypes = new HashSet<>();
 
-    @Resource
-    private ApplicationContext applicationContext;
-
-    @PostConstruct
-    private void init() {
-        Map<String, ConnectorService> beans = applicationContext.getBeansOfType(ConnectorService.class);
-        if (!CollectionUtils.isEmpty(beans)) {
-            beans.values().forEach(s -> {
-                service.putIfAbsent(s.getConnectorType(), s);
-                connectorTypes.add(s.getConnectorType());
-            });
+    @Override
+    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
+        ServiceLoader<ConnectorService> services = ServiceLoader.load(ConnectorService.class, Thread.currentThread().getContextClassLoader());
+        for (ConnectorService s : services) {
+            service.putIfAbsent(s.getConnectorType(), s);
+            connectorTypes.add(s.getConnectorType());
         }
     }
 
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
+
+    }
+
     @Override
     public void destroy() {
         pool.values().forEach(this::disconnect);

+ 7 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLConnector.java

@@ -5,6 +5,7 @@ package org.dbsyncer.connector.mysql;
 
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.mysql.cdc.MySQLListener;
+import org.dbsyncer.connector.mysql.storage.MySQLStorageService;
 import org.dbsyncer.connector.mysql.validator.MySQLConfigValidator;
 import org.dbsyncer.sdk.connector.ConfigValidator;
 import org.dbsyncer.sdk.listener.DatabaseQuartzListener;
@@ -14,6 +15,7 @@ import org.dbsyncer.sdk.constant.DatabaseConstant;
 import org.dbsyncer.sdk.enums.ListenerTypeEnum;
 import org.dbsyncer.sdk.listener.Listener;
 import org.dbsyncer.sdk.model.PageSql;
+import org.dbsyncer.sdk.spi.StorageService;
 import org.dbsyncer.sdk.util.PrimaryKeyUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,6 +58,11 @@ public final class MySQLConnector extends AbstractDatabaseConnector {
         return null;
     }
 
+    @Override
+    public StorageService getStorageService() {
+        return new MySQLStorageService();
+    }
+
     @Override
     public String generateUniqueCode() {
         return DatabaseConstant.DBS_UNIQUE_CODE;

+ 31 - 24
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/storage/MySQLStorageServiceProvider.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/storage/MySQLStorageService.java

@@ -26,13 +26,9 @@ import org.dbsyncer.sdk.storage.AbstractStorageService;
 import org.dbsyncer.sdk.util.DatabaseUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.dao.EmptyResultDataAccessException;
-import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
-import javax.annotation.PostConstruct;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,6 +37,7 @@ import java.sql.Types;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -54,10 +51,7 @@ import java.util.stream.Stream;
  * @Version 1.0.0
  * @Date 2020-01-08 15:17
  */
-@Component
-@ConditionalOnProperty(value = "dbsyncer.storage.type", havingValue = "MySQL")
-@ConfigurationProperties(prefix = "dbsyncer.storage.mysql")
-public class MySQLStorageServiceProvider extends AbstractStorageService {
+public class MySQLStorageService extends AbstractStorageService {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -65,25 +59,29 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
     private final String SHOW_TABLE = "show tables where Tables_in_%s = '%s'";
     private final String DROP_TABLE = "DROP TABLE %s";
     private final String TRUNCATE_TABLE = "TRUNCATE TABLE %s";
+    private final MySQLConnector connector = new MySQLConnector();
     private Map<String, Executor> tables = new ConcurrentHashMap<>();
-    private MySQLConnector connector = new MySQLConnector();
     private DatabaseConnectorInstance connectorInstance;
-    private DatabaseConfig config;
     private String database;
 
-    @PostConstruct
-    private void init() throws InterruptedException {
+    @Override
+    public void init(Properties properties) {
+        DatabaseConfig config = new DatabaseConfig();
+        config.setConnectorType(properties.getProperty("dbsyncer.storage.type"));
+        config.setUrl(properties.getProperty("dbsyncer.storage.mysql.url", "jdbc:mysql://127.0.0.1:3306/dbsyncer?rewriteBatchedStatements=true&seUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai&useSSL=false&verifyServerCertificate=false&autoReconnect=true"));
+        config.setUsername(properties.getProperty("dbsyncer.storage.mysql.username", "admin"));
+        config.setPassword(properties.getProperty("dbsyncer.storage.mysql.password", "admin"));
+        config.setDriverClassName(properties.getProperty("dbsyncer.storage.mysql.driver-class-name"));
         logger.info("url:{}", config.getUrl());
-        config.setConnectorType(connector.getConnectorType());
         database = DatabaseUtil.getDatabaseName(config.getUrl());
-        connectorInstance = (DatabaseConnectorInstance) connector.connect(config);
+        connectorInstance = new DatabaseConnectorInstance(config);
         // 初始化表
         initTable();
     }
 
     @Override
     protected String getSeparator() {
-        return "_";
+        return StringUtil.UNDERLINE;
     }
 
     @Override
@@ -338,7 +336,7 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
         }
     }
 
-    private void initTable() throws InterruptedException {
+    private void initTable() {
         // 配置
         FieldBuilder builder = new FieldBuilder();
         builder.build(ConfigConstant.CONFIG_MODEL_ID, ConfigConstant.CONFIG_MODEL_NAME, ConfigConstant.CONFIG_MODEL_TYPE, ConfigConstant.CONFIG_MODEL_CREATE_TIME, ConfigConstant.CONFIG_MODEL_UPDATE_TIME, ConfigConstant.CONFIG_MODEL_JSON);
@@ -363,7 +361,11 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
         });
 
         // wait few seconds for execute sql
-        TimeUnit.SECONDS.sleep(1);
+        try {
+            TimeUnit.SECONDS.sleep(1);
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        }
     }
 
     private Executor createTableIfNotExist(String table, Executor executor) {
@@ -392,9 +394,7 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
     }
 
     private String readSql(String type, boolean systemTable, String table) {
-        String template = PREFIX_TABLE.concat(type);
-        String filePath = "/".concat(template).concat(".sql");
-
+        String filePath = getSqlFilePath(type);
         StringBuilder res = new StringBuilder();
         InputStream in = null;
         InputStreamReader isr = null;
@@ -417,11 +417,22 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
 
         // 动态替换表名
         if (!systemTable) {
+            String template = PREFIX_TABLE.concat(type);
             return StringUtil.replace(res.toString(), template, table);
         }
         return res.toString();
     }
 
+    /**
+     * 获取sql脚本路径
+     *
+     * @param type
+     * @return /dbsyncer_mysql_config.sql
+     */
+    private String getSqlFilePath(String type) {
+        return new StringBuilder(StringUtil.FORWARD_SLASH).append(PREFIX_TABLE).append(connector.getConnectorType().toLowerCase()).append(StringUtil.UNDERLINE).append(type).append(".sql").toString();
+    }
+
     private void executeSql(String ddl) {
         connectorInstance.execute(databaseTemplate -> {
             databaseTemplate.execute(ddl);
@@ -443,10 +454,6 @@ public class MySQLStorageServiceProvider extends AbstractStorageService {
         }
     }
 
-    public void setConfig(DatabaseConfig config) {
-        this.config = config;
-    }
-
     final class FieldBuilder {
         Map<String, Field> fieldMap;
         List<Field> fields;

+ 0 - 1
dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/META-INF/services/org.dbsyncer.sdk.spi.StorageService

@@ -1 +0,0 @@
-org.dbsyncer.connector.mysql.storage.MySQLStorageServiceProvider

+ 0 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_config.sql → dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_config.sql


+ 0 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_data.sql → dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_data.sql


+ 0 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_log.sql → dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/dbsyncer_mysql_log.sql


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

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.manager.impl;
 
 import org.dbsyncer.common.model.Paging;
@@ -20,10 +23,10 @@ import org.dbsyncer.parser.model.Meta;
 import org.dbsyncer.parser.model.OperationConfig;
 import org.dbsyncer.plugin.PluginFactory;
 import org.dbsyncer.sdk.connector.ConnectorInstance;
+import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.dbsyncer.sdk.enums.StorageEnum;
 import org.dbsyncer.sdk.filter.Query;
 import org.dbsyncer.sdk.spi.StorageService;
-import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationListener;

+ 10 - 0
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/spi/ConnectorService.java

@@ -173,4 +173,14 @@ public interface ConnectorService<I extends ConnectorInstance, C extends Connect
      * @return
      */
     Listener getListener(String listenerType);
+
+    /**
+     * 获取存储服务
+     *
+     * @return
+     */
+    default StorageService getStorageService() {
+        return null;
+    }
+
 }

+ 6 - 0
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/spi/StorageService.java

@@ -9,6 +9,7 @@ import org.dbsyncer.sdk.filter.Query;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 /**
  * 存储服务(支持记录配置/日志/同步数据)
@@ -19,6 +20,11 @@ import java.util.Map;
  */
 public interface StorageService {
 
+    /**
+     * 初始化
+     */
+    void init(Properties properties);
+
     /**
      * 查询所有数据
      *

+ 72 - 2
dbsyncer-storage/src/main/java/org/dbsyncer/storage/StorageSupportConfiguration.java

@@ -1,10 +1,25 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.storage;
 
+import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.connector.ConnectorFactory;
 import org.dbsyncer.sdk.spi.StorageService;
-import org.dbsyncer.storage.impl.DiskStorageServiceImpl;
+import org.dbsyncer.storage.impl.DiskStorageService;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.origin.OriginTrackedValue;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.AbstractEnvironment;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.PropertySource;
+
+import javax.annotation.Resource;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
 
 /**
  * @author AE86
@@ -14,10 +29,65 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class StorageSupportConfiguration {
 
+    private final String PREFIX_STORAGE = "dbsyncer.storage";
+
+    private final String STORAGE_TYPE = "dbsyncer.storage.type";
+
+    @Resource
+    private Environment environment;
+
+    @Resource
+    private ConnectorFactory connectorFactory;
+
     @Bean
     @ConditionalOnMissingBean
     public StorageService storageService() {
-        return new DiskStorageServiceImpl();
+        Properties properties = new Properties();
+        if (environment instanceof AbstractEnvironment) {
+            AbstractEnvironment ae = (AbstractEnvironment) environment;
+            MutablePropertySources propertySources = ae.getPropertySources();
+            for (PropertySource<?> propertySource : propertySources) {
+                boolean applicationConfig = propertySource.getName().contains("application");
+                if (!applicationConfig) {
+                    continue;
+                }
+                Map<String, OriginTrackedValue> props = (Map<String, OriginTrackedValue>) propertySource.getSource();
+                props.forEach((k, v) -> {
+                    if (StringUtil.startsWith(k, PREFIX_STORAGE)) {
+                        properties.put(k, v.getValue());
+                    }
+                });
+            }
+        }
+
+        // 指定存储类型
+        String storageType = properties.getProperty(STORAGE_TYPE);
+        if (StringUtil.isNotBlank(storageType)) {
+            String connectorType = getConnectorType(storageType);
+            if (StringUtil.isNotBlank(connectorType)) {
+                StorageService storageService = connectorFactory.getConnectorService(connectorType).getStorageService();
+                if (storageService != null) {
+                    storageService.init(properties);
+                    return storageService;
+                }
+            }
+        }
+
+        // 默认磁盘存储
+        DiskStorageService storageService = new DiskStorageService();
+        storageService.init(properties);
+        return storageService;
+    }
+
+    private String getConnectorType(String storageType) {
+        Iterator<String> iterator = connectorFactory.getConnectorTypeAll().iterator();
+        while (iterator.hasNext()) {
+            String connectorType = iterator.next();
+            if (StringUtil.equalsIgnoreCase(storageType, connectorType)) {
+                return connectorType;
+            }
+        }
+        return null;
     }
 
 }

+ 10 - 13
dbsyncer-storage/src/main/java/org/dbsyncer/storage/impl/DiskStorageServiceImpl.java → dbsyncer-storage/src/main/java/org/dbsyncer/storage/impl/DiskStorageService.java

@@ -3,7 +3,6 @@
  */
 package org.dbsyncer.storage.impl;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanClause;
@@ -16,26 +15,26 @@ import org.apache.lucene.search.highlight.QueryScorer;
 import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
 import org.dbsyncer.common.model.Paging;
 import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.dbsyncer.sdk.enums.FilterEnum;
 import org.dbsyncer.sdk.enums.OperationEnum;
-import org.dbsyncer.sdk.storage.AbstractStorageService;
-import org.dbsyncer.storage.StorageException;
-import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.dbsyncer.sdk.enums.StorageEnum;
-import org.dbsyncer.storage.lucene.Option;
-import org.dbsyncer.storage.lucene.Shard;
 import org.dbsyncer.sdk.filter.AbstractFilter;
 import org.dbsyncer.sdk.filter.BooleanFilter;
 import org.dbsyncer.sdk.filter.Query;
+import org.dbsyncer.sdk.storage.AbstractStorageService;
+import org.dbsyncer.storage.StorageException;
+import org.dbsyncer.storage.lucene.Option;
+import org.dbsyncer.storage.lucene.Shard;
 import org.dbsyncer.storage.util.DocumentUtil;
 
-import javax.annotation.PostConstruct;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -46,7 +45,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * @Version 1.0.0
  * @Date 2023-09-10 23:22
  */
-public class DiskStorageServiceImpl extends AbstractStorageService {
+public class DiskStorageService extends AbstractStorageService {
 
     private Map<String, Shard> shards = new ConcurrentHashMap();
 
@@ -56,10 +55,8 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
     private static final String PATH = new StringBuilder(System.getProperty("user.dir")).append(File.separatorChar).append("data")
             .append(File.separatorChar).toString();
 
-    @PostConstruct
-    private void init() {
-        // 废弃binlog
-        FileUtils.deleteQuietly(new File(PATH + "binlog"));
+    @Override
+    public void init(Properties properties) {
         // 创建配置和日志索引shard
         getShard(getSharding(StorageEnum.CONFIG, null));
         getShard(getSharding(StorageEnum.LOG, null));
@@ -166,7 +163,7 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
         filters.forEach(p -> {
             FilterEnum filterEnum = FilterEnum.getFilterEnum(p.getFilter());
             BooleanClause.Occur occur = getOccur(p.getOperation());
-             switch (filterEnum) {
+            switch (filterEnum) {
                 case EQUAL:
                 case LIKE:
                     builder.add(DiskQueryHelper.newEqual(p), occur);

+ 5 - 5
dbsyncer-web/src/main/resources/application.properties

@@ -48,12 +48,12 @@ dbsyncer.parser.table.group.buffer-queue-capacity=40000
 dbsyncer.parser.table.group.buffer-period-millisecond=300
 
 #storage
-# 存储配置类型(MySQL)
+# 数据存储类型:disk(默认)/mysql(推荐生产环境使用)
 # false: 保存磁盘/data/config(驱动配置)|data(按驱动分别存储增量数据)|log(系统日志)}
-dbsyncer.storage.type=none
-dbsyncer.storage.mysql.config.url=jdbc:mysql://127.0.0.1:3306/dbsyncer?rewriteBatchedStatements=true&seUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai&useSSL=false&verifyServerCertificate=false&autoReconnect=true
-dbsyncer.storage.mysql.config.username=root
-dbsyncer.storage.mysql.config.password=123
+dbsyncer.storage.type=disk
+dbsyncer.storage.mysql.url=jdbc:mysql://127.0.0.1:3306/dbsyncer?rewriteBatchedStatements=true&seUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai&useSSL=false&verifyServerCertificate=false&autoReconnect=true
+dbsyncer.storage.mysql.username=root
+dbsyncer.storage.mysql.password=123
 # [StorageBufferActuator]线程数
 dbsyncer.storage.thread-core-size=4
 # [StorageBufferActuator]最大线程数