diff --git a/framework/waterflow/java/waterflow-core/src/main/java/modelengine/fit/waterflow/domain/utils/UUIDUtil.java b/framework/waterflow/java/waterflow-core/src/main/java/modelengine/fit/waterflow/domain/utils/UUIDUtil.java index cdea84817..5aa67a5c0 100644 --- a/framework/waterflow/java/waterflow-core/src/main/java/modelengine/fit/waterflow/domain/utils/UUIDUtil.java +++ b/framework/waterflow/java/waterflow-core/src/main/java/modelengine/fit/waterflow/domain/utils/UUIDUtil.java @@ -6,7 +6,10 @@ package modelengine.fit.waterflow.domain.utils; +import modelengine.fitframework.inspection.Validation; + import java.util.UUID; +import java.util.function.Supplier; /** * Uuid的Utils类。 @@ -15,12 +18,27 @@ * @since 1.0 */ public class UUIDUtil { + private static Supplier uuidGenerator = () -> UUID.randomUUID().toString().replace("-", ""); + /** * 随机生成uuid。 * * @return 随机生成的uuid的 {@link String}。 */ public static String uuid() { - return UUID.randomUUID().toString().replace("-", ""); + return uuidGenerator.get(); + } + + /** + * 全局替换 uuid 的生成器。 + * + * @param uuidGenerator 表示要设置的 uuid 生成器的 {@link Supplier}{@code <}{@link String}{@code >}。 + * @return 表示设置前使用的 uuid 生成器的 {@link Supplier}{@code <}{@link String}{@code >}。 + */ + public static synchronized Supplier setUuidGenerator(Supplier uuidGenerator) { + Validation.notNull(uuidGenerator, "The uuid generator should not be null."); + Supplier oldUuidGenerator = UUIDUtil.uuidGenerator; + UUIDUtil.uuidGenerator = uuidGenerator; + return oldUuidGenerator; } } diff --git a/framework/waterflow/java/waterflow-core/src/test/java/modelengine/fit/waterflow/domain/utils/UUIDUtilTest.java b/framework/waterflow/java/waterflow-core/src/test/java/modelengine/fit/waterflow/domain/utils/UUIDUtilTest.java new file mode 100644 index 000000000..a30cdb192 --- /dev/null +++ b/framework/waterflow/java/waterflow-core/src/test/java/modelengine/fit/waterflow/domain/utils/UUIDUtilTest.java @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.waterflow.domain.utils; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; + +/** + * {@link UUIDUtil} 的测试。 + * + * @author 宋永坦 + * @since 2025-09-18 + */ +class UUIDUtilTest { + @Test + void shouldGetIdWhenExecuteUuidGivenNewIdGenerator() { + AtomicInteger idBase = new AtomicInteger(1); + Supplier oldGenerator = UUIDUtil.setUuidGenerator(() -> Integer.toString(idBase.getAndIncrement())); + + String uuid1 = UUIDUtil.uuid(); + String uuid2 = UUIDUtil.uuid(); + UUIDUtil.setUuidGenerator(oldGenerator); + + Assertions.assertEquals("1", uuid1); + Assertions.assertEquals("2", uuid2); + } +} \ No newline at end of file