概述:本文主要介紹springboot基于mongodb有序id生成,如生成工單編號GD202109290001。單機情況下效率每秒生成5000個有序ID。
實現(xiàn)方式如下
maven
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
< 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 > |
代碼編寫
1
2
3
4
5
6
7
8
9
10
11
|
@Document @Data public class Incr { @Id private String id; private String collectionName; private Long incrId; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@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(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@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 ; } } |
到此這篇關于詳解SpringBoot Mongo 自增長ID有序規(guī)則的文章就介紹到這了,更多相關SpringBoot Mongo 自增長ID內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7013175299638575135