diff --git a/continew-starter-idempotent/pom.xml b/continew-starter-idempotent/pom.xml
index 12b86241..fd4d1679 100644
--- a/continew-starter-idempotent/pom.xml
+++ b/continew-starter-idempotent/pom.xml
@@ -18,5 +18,11 @@
top.continew
continew-starter-cache-redisson
+
+
+
+ cn.hutool
+ hutool-crypto
+
\ No newline at end of file
diff --git a/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
index 34abb9c1..7484ff53 100644
--- a/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
+++ b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
@@ -19,16 +19,15 @@ package top.continew.starter.idempotent.autoconfigure;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
-import org.springframework.core.ResolvableType;
import top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration;
import top.continew.starter.core.constant.PropertiesConstants;
import top.continew.starter.idempotent.aop.IdempotentAspect;
+import top.continew.starter.idempotent.generator.DefaultIdempotentNameGenerator;
import top.continew.starter.idempotent.generator.IdempotentNameGenerator;
/**
@@ -60,11 +59,7 @@ public class IdempotentAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public IdempotentNameGenerator idempotentNameGenerator() {
- if (log.isErrorEnabled()) {
- log.error("Consider defining a bean of type '{}' in your configuration.", ResolvableType
- .forClass(IdempotentNameGenerator.class));
- }
- throw new NoSuchBeanDefinitionException(IdempotentNameGenerator.class);
+ return new DefaultIdempotentNameGenerator();
}
@PostConstruct
diff --git a/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/generator/DefaultIdempotentNameGenerator.java b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/generator/DefaultIdempotentNameGenerator.java
new file mode 100644
index 00000000..741bf8b6
--- /dev/null
+++ b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/generator/DefaultIdempotentNameGenerator.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package top.continew.starter.idempotent.generator;
+
+import cn.hutool.core.util.ClassUtil;
+import cn.hutool.crypto.digest.DigestUtil;
+import cn.hutool.json.JSONUtil;
+import top.continew.starter.core.constant.StringConstants;
+
+import java.lang.reflect.Method;
+
+/**
+ * 默认幂等名称生成器
+ *
+ * @author Charles7c
+ * @since 2.12.1
+ */
+public class DefaultIdempotentNameGenerator implements IdempotentNameGenerator {
+
+ @Override
+ public String generate(Object target, Method method, Object... args) {
+ StringBuilder nameSb = new StringBuilder();
+ // 添加类名
+ nameSb.append(ClassUtil.getClassName(target, false));
+ nameSb.append(StringConstants.COLON);
+ // 添加方法名
+ nameSb.append(method.getName());
+ // 添加参数信息的哈希值(如果有参数)
+ if (args != null && args.length > 0) {
+ nameSb.append(StringConstants.COLON);
+ // 使用JSONUtil序列化参数,然后计算哈希值以确保唯一性
+ String argsJson = JSONUtil.toJsonStr(args);
+ nameSb.append(DigestUtil.md5Hex(argsJson));
+ }
+ return nameSb.toString();
+ }
+}