Selaa lähdekoodia

ImadcnIdentifierGenerator

miemie 4 vuotta sitten
vanhempi
commit
4dde44bf30

+ 1 - 0
TEMP_CHANGELOG.md

@@ -8,3 +8,4 @@
 - feat: Wrapper 新增api `not(boolean condition, Consumer<Param> consumer)`
 - feat: 新增 `MybatisPlusInterceptor` 解决 多租户和分页 插件一级和二级缓存不正确问题
 - feat: 新分页插件优化 size<0 时继续拼接 orderBy
+- feat: 新增 `IdentifierGenerator` 一个实现类 `ImadcnIdentifierGenerator`

+ 1 - 0
build.gradle

@@ -46,6 +46,7 @@ ext {
         "aspectjrt"                  : "org.aspectj:aspectjrt:1.9.6",
         "cglib"                      : "cglib:cglib:3.3.0",
         "lombok"                     : "org.projectlombok:lombok:1.18.12",
+        "imadcn"                     : "com.imadcn.framework:idworker:1.5.0",
 
         "javax.servlet-api"          : "javax.servlet:javax.servlet-api:4.0.1",
         "aspectjweaver"              : "org.aspectj:aspectjweaver:1.9.6",

+ 1 - 0
mybatis-plus-core/build.gradle

@@ -7,6 +7,7 @@ dependencies {
 
     implementation "${lib.cglib}"
     implementation "${lib.'spring-aop'}"
+    implementation "${lib.'imadcn'}"
     implementation "${lib.'mybatis-ehcache'}"
     implementation "${lib.'mybatis-redis'}"
 }

+ 58 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/ImadcnIdentifierGenerator.java

@@ -0,0 +1,58 @@
+package com.baomidou.mybatisplus.core.incrementer;
+
+import com.imadcn.framework.idworker.config.ApplicationConfiguration;
+import com.imadcn.framework.idworker.config.ZookeeperConfiguration;
+import com.imadcn.framework.idworker.generator.CompressUUIDGenerator;
+import com.imadcn.framework.idworker.generator.SnowflakeGenerator;
+import com.imadcn.framework.idworker.register.zookeeper.ZookeeperWorkerRegister;
+import com.imadcn.framework.idworker.registry.zookeeper.ZookeeperRegistryCenter;
+import org.springframework.beans.factory.DisposableBean;
+
+/**
+ * 用 https://github.com/imadcn/idworker 的实现
+ *
+ * @author miemie
+ * @since 2020-08-11
+ */
+public class ImadcnIdentifierGenerator implements IdentifierGenerator, DisposableBean {
+
+    private final SnowflakeGenerator idGenerator;
+    private final CompressUUIDGenerator uuidGenerator = new CompressUUIDGenerator();
+
+    public ImadcnIdentifierGenerator(String serverLists) {
+        this(configuration(serverLists));
+    }
+
+    public ImadcnIdentifierGenerator(ZookeeperConfiguration zookeeperConfiguration) {
+        this(zookeeperConfiguration, new ApplicationConfiguration());
+    }
+
+    public ImadcnIdentifierGenerator(ZookeeperConfiguration zookeeperConfiguration,
+                                     ApplicationConfiguration applicationConfiguration) {
+        ZookeeperRegistryCenter center = new ZookeeperRegistryCenter(zookeeperConfiguration);
+        ZookeeperWorkerRegister register = new ZookeeperWorkerRegister(center, applicationConfiguration);
+        idGenerator = new SnowflakeGenerator(register);
+        idGenerator.init();
+    }
+
+    private static ZookeeperConfiguration configuration(String serverLists) {
+        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration();
+        zookeeperConfiguration.setServerLists(serverLists);
+        return zookeeperConfiguration;
+    }
+
+    @Override
+    public Number nextId(Object entity) {
+        return idGenerator.nextId();
+    }
+
+    @Override
+    public String nextUUID(Object entity) {
+        return uuidGenerator.nextStringId();
+    }
+
+    @Override
+    public void destroy() throws Exception {
+        idGenerator.close();
+    }
+}

+ 32 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/incrementer/ImadcnIdentifierGeneratorTest.java

@@ -0,0 +1,32 @@
+package com.baomidou.mybatisplus.core.incrementer;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author miemie
+ * @since 2020-08-11
+ */
+public class ImadcnIdentifierGeneratorTest {
+
+    private static ImadcnIdentifierGenerator generator;
+
+    @BeforeAll
+    static void init() {
+        generator = new ImadcnIdentifierGenerator("localhost:2181");
+    }
+
+    @AfterAll
+    static void close() throws Exception {
+        generator.destroy();
+    }
+
+    @Test
+    void nextId() {
+        for (int i = 0; i < 10; i++) {
+            System.out.println(generator.nextId(null));
+            System.out.println(generator.nextUUID(null));
+        }
+    }
+}