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【筆記】


分享到:


相關文章: