分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)
在Spring Cloud项目中,你可以使用MyBatis-Plus集成百度开源的uid-generator库来生成分布式全局唯一ID。以下是集成的步骤和示例代码:
- 添加uid-generator的依赖到你的
pom.xml
文件中:
<dependency>
<groupId>com.baidu.fsg.uid</groupId>
<artifactId>uid-generator</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
- 配置uid-generator的相关参数,在
application.yml
中添加:
uid:
generator:
zkAddress: 127.0.0.1:2181 # Zookeeper地址
topicId: 1 # 应用标识
machineId: 1 # 机器标识
- 创建一个配置类,初始化UIDGenerator:
import com.baidu.fsg.uid.UIDGenerator;
import com.baidu.fsg.uid.worker.DefaultUIDWorker;
import com.baidu.fsg.uid.worker.WorkerNodeInfo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UidGeneratorConfig {
@Value("${uid.generator.zkAddress}")
private String zkAddress;
@Value("${uid.generator.topicId}")
private int topicId;
@Value("${uid.generator.machineId}")
private int machineId;
@Bean
public UIDGenerator uidGenerator() {
UIDGenerator.init(zkAddress, topicId, machineId);
return UIDGenerator.getInstance();
}
}
- 在MyBatis-Plus的实体类中使用UIDGenerator生成ID:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baidu.fsg.uid.UIDGenerator;
public class YourEntity {
@TableId(type = IdType.INPUT)
private Long id;
// 其他字段...
public void setId() {
this.id = UIDGenerator.getUid();
}
// getter和setter方法...
}
- 在你的业务代码中,当你需要创建一个新实体时,不需要手动设置ID,UIDGenerator会自动生成:
@Autowired
private UIDGenerator uidGenerator;
public void createEntity() {
YourEntity entity = new YourEntity();
entity.setId(); // 由UIDGenerator自动生成ID
// 设置其他属性...
// 保存实体到数据库...
}
确保你的Zookeeper服务正常运行,并且uid-generator的版本与你集成的MyBatis-Plus版本兼容。这样你就可以在Spring Cloud项目中使用百度的uid-generator来生成全局唯一ID了。
评论已关闭