springboot2.0集成百度uidgenerator【笔记】

一句该文章做的笔记:https://blog.csdn.net/a13794479495/article/details/83541569

1.下载源码https://github.com/baidu/uid-generator,并依据官网创建好表

修改数据库连接池


<code>

<dependency>
<groupid>com.zaxxer/<groupid>
<artifactid>HikariCP/<artifactid>
<version>2.7.9/<version>
/<dependency>/<code>

修改数据库连接池参数信息

<code>\t
\t<bean>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t<property>
\t\t
\t/<bean>/<code>
<code>mysql.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.xx.xx:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
jdbc.username=root
jdbc.password=/Akk2pyqQ8ohJN8tOmGwdPr64BNxG/hnjXZqZrp2d7X8BNk1:/<code>

执行mvn clean install


2.springboot工程集成

正常ssm工程

引入依赖

<code><dependency>
\t<groupid>com.baidu.fsg/<groupid>
\t<artifactid>uid-generator/<artifactid>
\t<version>1.0.0-SNAPSHOT/<version>
/<dependency>/<code>
<code>mybatis配置信息

mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations:
- classpath*:mybatis/mapper/*Mapper.xml/<code>

拷贝WorkerNodeDAO.java到自己的springboot项目中,命名成WorkerNodeMapper.java


springboot2.0集成百度uidgenerator【笔记】

拷贝WORKER_NODE.xml到自己的springboot项目中,命名成WorkerNodeMapper.xml


springboot2.0集成百度uidgenerator【笔记】

拷贝DisposableWorkerIdAssigner.java到自己的springboot项目中,修改注入的WorkerNodeDAO为WorkerNodeMapper;


springboot2.0集成百度uidgenerator【笔记】


<code>package com.share.config;

import com.baidu.fsg.uid.impl.CachedUidGenerator;
import com.share.service.DisposableWorkerIdAssigner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md

* 百度id生成器
* 两种生成器: DefaultUidGenerator、CachedUidGenerator。如对UID生成性能有要求, 请使用CachedUidGenerator
* 对应Spring配置分别为: default-uid-spring.xml、cached-uid-spring.xml
*/
@Configuration
public class CachedUidGeneratorConfig {

/**
* 用完即弃的WorkerIdAssigner, 依赖DB操作
* @return
*/
@Bean
public DisposableWorkerIdAssigner disposableWorkerIdAssigner(){
return new DisposableWorkerIdAssigner();
}

@Bean
public CachedUidGenerator cachedUidGenerator(DisposableWorkerIdAssigner disposableWorkerIdAssigner){
CachedUidGenerator cachedUidGenerator = new CachedUidGenerator();
cachedUidGenerator.setWorkerIdAssigner(disposableWorkerIdAssigner);
//以下为可选配置, 如未指定将采用默认值
cachedUidGenerator.setTimeBits(29);
cachedUidGenerator.setWorkerBits(21);
cachedUidGenerator.setSeqBits(13);
cachedUidGenerator.setEpochStr("2016-09-20");

//RingBuffer size扩容参数, 可提高UID生成的吞吐量
//默认:3, 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536
cachedUidGenerator.setBoostPower(3);
// 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50
// 举例: bufferSize=1024, paddingFactor=50 -> threshold=1024 * 50 / 100 = 512.
// 当环上可用UID数量 < 512时, 将自动对RingBuffer进行填充补全
//<property>

//另外一种RingBuffer填充时机, 在Schedule线程中, 周期性检查填充
//默认:不配置此项, 即不实用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒

cachedUidGenerator.setScheduleInterval(60L);



//拒绝策略: 当环已满, 无法继续填充时
//默认无需指定, 将丢弃Put操作, 仅日志记录. 如有特殊需求, 请实现RejectedPutBufferHandler接口(支持Lambda表达式)
//<property>
//cachedUidGenerator.setRejectedPutBufferHandler();
//拒绝策略: 当环已空, 无法继续获取时 -->
//默认无需指定, 将记录日志, 并抛出UidGenerateException异常. 如有特殊需求, 请实现RejectedTakeBufferHandler接口(支持Lambda表达式) -->
//<property>

return cachedUidGenerator;
}

}/<code>

controller测试

<code>@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

@Autowired
private UserService userService;

@Autowired
private UidGenerator uidGenerator;

@GetMapping("/uid")
public String uid(){
long time1 = System.nanoTime();
long uid = uidGenerator.getUID();
long time2 = System.nanoTime();
System.out.println(time2-time1);
System.out.println(uidGenerator.parseUID(uid));
System.out.println("-----------------------------");
long timeMillis = System.currentTimeMillis();
for (int i = 0; i < 10000000 ; i++) {
uidGenerator.getUID();

}
long timeMillis2 = System.currentTimeMillis();
System.out.println("耗时:"+(timeMillis2-timeMillis));
return String.valueOf(uid);
}
\t....
}/<code>


springboot2.0集成百度uidgenerator【笔记】


springboot2.0集成百度uidgenerator【笔记】


分享到:


相關文章: