Procházet zdrojové kódy

支持删除mysql过期数据

AE86 před 1 rokem
rodič
revize
a5cc463aea

+ 6 - 0
dbsyncer-storage/src/main/java/org/dbsyncer/storage/AbstractStorageService.java

@@ -3,6 +3,7 @@ package org.dbsyncer.storage;
 import org.dbsyncer.common.model.Paging;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.storage.enums.StorageEnum;
+import org.dbsyncer.storage.query.BooleanFilter;
 import org.dbsyncer.storage.query.Query;
 import org.dbsyncer.storage.strategy.Strategy;
 import org.slf4j.Logger;
@@ -83,6 +84,11 @@ public abstract class AbstractStorageService implements StorageService, Disposab
 
     @Override
     public void delete(Query query) {
+        BooleanFilter q = query.getBooleanFilter();
+        if (CollectionUtils.isEmpty(q.getClauses()) && CollectionUtils.isEmpty(q.getFilters())) {
+            throw new StorageException("必须包含删除条件");
+        }
+
         boolean locked = false;
         try {
             locked = lock.tryLock(3, TimeUnit.SECONDS);

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

@@ -95,13 +95,8 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
     @Override
     protected void delete(String sharding, Query query) {
         Shard shard = getShard(sharding);
-        BooleanFilter baseQuery = query.getBooleanFilter();
-        List<AbstractFilter> filters = baseQuery.getFilters();
-        List<BooleanFilter> clauses = baseQuery.getClauses();
-        if (CollectionUtils.isEmpty(clauses) && CollectionUtils.isEmpty(filters)) {
-            throw new StorageException("必须包含删除条件");
-        }
-        shard.delete(buildQuery(filters, clauses, new HashSet<>()));
+        BooleanFilter q = query.getBooleanFilter();
+        shard.delete(buildQuery(q.getFilters(), q.getClauses(), new HashSet<>()));
     }
 
     @Override

+ 10 - 4
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/MysqlStorageServiceImpl.java

@@ -123,7 +123,12 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
 
     @Override
     protected void delete(String sharding, Query query) {
-
+        Executor executor = getExecutor(query.getType(), sharding);
+        StringBuilder sql = new StringBuilder("DELETE FROM `").append(executor.getTable()).append("`");
+        List<Object> params = new ArrayList<>();
+        buildQuerySqlWithParams(query, params, sql, new ArrayList<>());
+        final List<Object[]> args = params.stream().map(val -> new Object[]{val}).collect(Collectors.toList());
+        connectorMapper.execute(databaseTemplate -> databaseTemplate.batchUpdate(sql.toString(), args));
     }
 
     @Override
@@ -270,6 +275,7 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     private void buildQuerySqlWithFilters(List<AbstractFilter> filters, List<Object> args, StringBuilder sql, List<AbstractFilter> highLightKeys) {
         // 过滤值
         int size = filters.size();
+        String quotation = connector.buildSqlWithQuotation();
         for (int i = 0; i < size; i++) {
             AbstractFilter p = filters.get(i);
 
@@ -281,15 +287,15 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
             String name = UnderlineToCamelUtils.camelToUnderline(p.getName());
             switch (filterEnum) {
                 case EQUAL:
-                    sql.append(name).append(" = ?");
+                    sql.append(quotation).append(name).append(quotation).append(" = ?");
                     args.add(p.getValue());
                     break;
                 case LIKE:
-                    sql.append(name).append(" LIKE ?");
+                    sql.append(quotation).append(name).append(quotation).append(" LIKE ?");
                     args.add(new StringBuilder("%").append(p.getValue()).append("%"));
                     break;
                 case LT:
-                    sql.append(name).append(" < ?");
+                    sql.append(quotation).append(name).append(quotation).append(" < ?");
                     args.add(p.getValue());
                     break;
             }

+ 1 - 1
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/monitor/MonitorController.java

@@ -101,7 +101,7 @@ public class MonitorController extends BaseController {
         connectorService.refreshHealth();
     }
 
-    @Scheduled(fixedRate = 15000)
+    @Scheduled(fixedRate = 30000)
     public void deleteExpiredDataAndLog() {
         monitorService.deleteExpiredDataAndLog();
     }