詳解SpringBoot Mongo 自增長(zhǎng)ID有序規(guī)則
概述:本文主要介紹springboot基于mongodb有序id生成,如生成工單編號(hào)GD202109290001。單機(jī)情況下效率每秒生成5000個(gè)有序ID。
實(shí)現(xiàn)方式如下
maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
代碼編寫
@Document
@Data
public class Incr {
@Id
private String id;
private String collectionName;
private Long incrId;
}
@Service
public class IncrService {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 獲取自增ID
* @param collectionName
* @return
*/
public Long getIncrId(String collectionName){
Query query = new Query(Criteria.where("collectionName").is(collectionName));
Update update = new Update();
update.inc("incrId");
FindAndModifyOptions options = FindAndModifyOptions.options();
options.upsert(true);
options.returnNew(true);
Incr incr = mongoTemplate.findAndModify(query,update,options,Incr.class);
return incr.getIncrId();
}
}
@RestController
@RequestMapping(value = "incr")
public class IncrController {
@Autowired
private IncrService incrService;
@RequestMapping(value = "test")
public Object test(){
long start = System.currentTimeMillis();
List<String> aas = new ArrayList<>();
for (int i=0;i<10000;i++){
aas.add(i+"");
}
int i = 0;
aas.parallelStream().forEach(aa -> {
incrService.getIncrId(aa+"");
});
System.out.println(System.currentTimeMillis()-start);
return true;
}
}
到此這篇關(guān)于詳解SpringBoot Mongo 自增長(zhǎng)ID有序規(guī)則的文章就介紹到這了,更多相關(guān)SpringBoot Mongo 自增長(zhǎng)ID內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決SpringBoot log4j日志沒(méi)生成的問(wèn)題
這篇文章主要介紹了解決SpringBoot log4j日志沒(méi)生成的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring超詳細(xì)講解事務(wù)和事務(wù)傳播機(jī)制
Spring事務(wù)的本質(zhì)就是對(duì)數(shù)據(jù)庫(kù)事務(wù)的支持,沒(méi)有數(shù)據(jù)庫(kù)事務(wù),Spring是無(wú)法提供事務(wù)功能的。Spring只提供統(tǒng)一的事務(wù)管理接口,具體實(shí)現(xiàn)都是由數(shù)據(jù)庫(kù)自己實(shí)現(xiàn)的,Spring會(huì)在事務(wù)開(kāi)始時(shí),根據(jù)當(dāng)前設(shè)置的隔離級(jí)別,調(diào)整數(shù)據(jù)庫(kù)的隔離級(jí)別,由此保持一致2022-06-06
【MyBatis源碼全面解析】MyBatis一二級(jí)緩存介紹
下面小編就為大家?guī)?lái)一篇【MyBatis源碼全面解析】MyBatis一二級(jí)緩存介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
解決SpringCloud Config結(jié)合github無(wú)法讀取配置的問(wèn)題
這篇文章主要介紹了解決SpringCloud Config結(jié)合github無(wú)法讀取配置的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
SpringBoot詳細(xì)列舉常用注解的說(shuō)明
在開(kāi)發(fā)SpringBoot程序的過(guò)程中,有可能與其他業(yè)務(wù)系統(tǒng)進(jìn)行對(duì)接開(kāi)發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot常見(jiàn)的注解的相關(guān)資料,需要的朋友可以參考下2022-06-06

