From c635d78b479510ebe2556a420948effcd30a0731 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 21 十二月 2024 18:40:43 +0800 Subject: [PATCH] 新建德森项目分支 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/interceptor/DataChangeInterceptor.java | 216 +++++++++++++++++++++++++++--------------------------- 1 files changed, 108 insertions(+), 108 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/interceptor/DataChangeInterceptor.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/interceptor/DataChangeInterceptor.java index da14f60..011a2dc 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/interceptor/DataChangeInterceptor.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/interceptor/DataChangeInterceptor.java @@ -1,108 +1,108 @@ -package com.zy.asrs.wms.common.interceptor; - -import com.zy.asrs.framework.common.SpringUtils; -import com.zy.asrs.wms.common.constant.RedisConstants; -import com.zy.asrs.wms.utils.RedisUtil; -import org.apache.ibatis.executor.statement.StatementHandler; -import org.apache.ibatis.plugin.*; -import java.sql.Connection; -import java.util.Properties; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -@Intercepts({ - @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}) -}) -public class DataChangeInterceptor implements Interceptor { - - @Override - public Object intercept(Invocation invocation) throws Throwable { - StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); - String sql = statementHandler.getBoundSql().getSql(); - if (sql != null) { - String trimmedSql = sql.trim().toUpperCase(); -// System.out.println("SQL: " + sql); - if (trimmedSql.startsWith("INSERT")) { - clearRedisCache(trimmedSql); - } else if (trimmedSql.startsWith("UPDATE")) { - clearRedisCache(trimmedSql); - } else if (trimmedSql.startsWith("DELETE")) { - clearRedisCache(trimmedSql); - } - } - - // 鏍规嵁闇�瑕佽繘琛孲QL瑙f瀽 - return invocation.proceed(); - } - - @Override - public Object plugin(Object target) { - return Plugin.wrap(target, this); - } - - @Override - public void setProperties(Properties properties) {} - - public static String extractTableName(String sql) { - if (sql == null || sql.trim().isEmpty()) { - return "鏃犳晥鐨凷QL璇彞"; - } - - String trimmedSql = sql.trim().toUpperCase(); - String tableName = ""; - - // 瀹氫箟姝e垯琛ㄨ揪寮� - Pattern insertPattern = Pattern.compile("INSERT INTO (\\S+)", Pattern.CASE_INSENSITIVE); - Pattern updatePattern = Pattern.compile("UPDATE (\\S+)", Pattern.CASE_INSENSITIVE); - Pattern deletePattern = Pattern.compile("DELETE FROM (\\S+)", Pattern.CASE_INSENSITIVE); - - Matcher matcher; - - // 妫�鏌NSERT璇彞 - matcher = insertPattern.matcher(trimmedSql); - if (matcher.find()) { - tableName = matcher.group(1); - } else { - // 妫�鏌PDATE璇彞 - matcher = updatePattern.matcher(trimmedSql); - if (matcher.find()) { - tableName = matcher.group(1); - } else { - // 妫�鏌ELETE璇彞 - matcher = deletePattern.matcher(trimmedSql); - if (matcher.find()) { - tableName = matcher.group(1); - } - } - } - - if (tableName.isEmpty()) { - return null; - } - - return tableName; - } - - private void clearRedisCache(String sql) { - RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); - if (redisUtil == null) { - return; - } - - String tableName = extractTableName(sql); - if (tableName == null) { - return; - } - - tableName = tableName.toLowerCase(); - - Set<String> keys = redisUtil.searchRedisKeys(tableName); - for (String key : keys) { - if (!key.startsWith(RedisConstants.CACHE_DATA)) { - continue; - } - redisUtil.del(key); - } - } -} +package com.zy.asrs.wms.common.interceptor; + +import com.zy.asrs.framework.common.SpringUtils; +import com.zy.asrs.wms.common.constant.RedisConstants; +import com.zy.asrs.wms.utils.RedisUtil; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.plugin.*; +import java.sql.Connection; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Intercepts({ + @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}) +}) +public class DataChangeInterceptor implements Interceptor { + + @Override + public Object intercept(Invocation invocation) throws Throwable { + StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); + String sql = statementHandler.getBoundSql().getSql(); + if (sql != null) { + String trimmedSql = sql.trim().toUpperCase(); +// System.out.println("SQL: " + sql); + if (trimmedSql.startsWith("INSERT")) { + clearRedisCache(trimmedSql); + } else if (trimmedSql.startsWith("UPDATE")) { + clearRedisCache(trimmedSql); + } else if (trimmedSql.startsWith("DELETE")) { + clearRedisCache(trimmedSql); + } + } + + // 鏍规嵁闇�瑕佽繘琛孲QL瑙f瀽 + return invocation.proceed(); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) {} + + public static String extractTableName(String sql) { + if (sql == null || sql.trim().isEmpty()) { + return "鏃犳晥鐨凷QL璇彞"; + } + + String trimmedSql = sql.trim().toUpperCase(); + String tableName = ""; + + // 瀹氫箟姝e垯琛ㄨ揪寮� + Pattern insertPattern = Pattern.compile("INSERT INTO (\\S+)", Pattern.CASE_INSENSITIVE); + Pattern updatePattern = Pattern.compile("UPDATE (\\S+)", Pattern.CASE_INSENSITIVE); + Pattern deletePattern = Pattern.compile("DELETE FROM (\\S+)", Pattern.CASE_INSENSITIVE); + + Matcher matcher; + + // 妫�鏌NSERT璇彞 + matcher = insertPattern.matcher(trimmedSql); + if (matcher.find()) { + tableName = matcher.group(1); + } else { + // 妫�鏌PDATE璇彞 + matcher = updatePattern.matcher(trimmedSql); + if (matcher.find()) { + tableName = matcher.group(1); + } else { + // 妫�鏌ELETE璇彞 + matcher = deletePattern.matcher(trimmedSql); + if (matcher.find()) { + tableName = matcher.group(1); + } + } + } + + if (tableName.isEmpty()) { + return null; + } + + return tableName; + } + + private void clearRedisCache(String sql) { + RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); + if (redisUtil == null) { + return; + } + + String tableName = extractTableName(sql); + if (tableName == null) { + return; + } + + tableName = tableName.toLowerCase(); + + Set<String> keys = redisUtil.searchRedisKeys(tableName); + for (String key : keys) { + if (!key.startsWith(RedisConstants.CACHE_DATA)) { + continue; + } + redisUtil.del(key); + } + } +} -- Gitblit v1.9.1