欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot MongoDB實現(xiàn)自增序列的項目實踐

 更新時間:2023年07月04日 16:51:39   作者:它山之石,可以攻玉  
在某些特定的業(yè)務場景下,會需要使用自增的序列來維護數(shù)據(jù),本文主要介紹了Springboot MongoDB實現(xiàn)自增序列的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在某些特定的業(yè)務場景下,會需要使用自增的序列來維護數(shù)據(jù),目前項目中因為使用MongoDB,顧記錄一下如何使用MongoDB實現(xiàn)自增序列。

MongoDB自增序列原理

MongoDB本身不具有自增序列的功能,但是MongoDB的$inc操作是具有原子性的,因為操作的原子性,那么就可以通過$inc序列+1的值作用本次序列,實現(xiàn)自增序列。

實現(xiàn)自增序列

定義自增序列IdSequence.java

@Document(collection = "sequences")
@Data
public class IdSequence {
    @Id
    private String id;
    /**
     * 自增的序列
     */
    private long nextId;
}

定義自增序列類型枚舉IdType.java

@Getter
@AllArgsConstructor
public enum IdType {
    /**
     * 圖書
     */
    BOOK("book");
    private final String type;
}

定義獲取自增序列輔助類IdHelper.java

@Component
public class IdHelper {
? ? private final MongoTemplate mongoTemplate;
? ? public IdHelper(MongoTemplate mongoTemplate) {
? ? ? ? this.mongoTemplate = mongoTemplate;
? ? }
? ? /**
? ? ?* 查詢指定類型的自增序列
? ? ?*
? ? ?* @param idType 類型
? ? ?* @return 自增序列
? ? ?*/
? ? public long nextId(IdType idType) {
? ? ? ? //構建查詢對象
? ? ? ? Query query = Query.query(Criteria.where(LambdaUtil.getFieldName(IdSequence::getId)).is(idType.getType()));
? ? ? ? //構建自增條件
? ? ? ? Update update = new Update().inc(LambdaUtil.getFieldName(IdSequence::getNextId), 1L);
? ? ? ? //構建選項
? ? ? ? FindAndModifyOptions options = FindAndModifyOptions.options().upsert(true).returnNew(true);
? ? ? ? //查詢自增序列
? ? ? ? IdSequence idSequence = mongoTemplate.findAndModify(query, update, options, IdSequence.class);
? ? ? ? //返回自增序列
? ? ? ? return Objects.requireNonNull(idSequence).getNextId();
? ? }
}

定義測試類

@RestController
@RequestMapping(value = "/id")
public class IdSequenceController {
? ? @Resource
? ? private IdHelper idHelper;
? ? @GetMapping(value = "/nextId")
? ? public long nextId() {
? ? ? ? return idHelper.nextId(IdType.BOOK);
? ? }
}

總結

使用MongoDB實現(xiàn)自增序列是基于MongoDB的$inc操作指令,經過測試100個并發(fā)下沒有發(fā)現(xiàn)重復id的產生,但是還是建議使用MongoDB自己的Id生成策略,畢竟MongoDB作為非關系型數(shù)據(jù)庫,如果維護一個自增序列,性能上肯定沒有ObjectId好,而且分片情況下需要自己校驗自增序列的唯一性,當然在某些特殊的業(yè)務場景下必須要使用自增序列的,也屬于正常。

到此這篇關于Springboot MongoDB實現(xiàn)自增序列的項目實踐的文章就介紹到這了,更多相關Springboot MongoDB自增序列內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot中的application.properties無法加載問題定位技巧

    SpringBoot中的application.properties無法加載問題定位技巧

    這篇文章主要介紹了SpringBoot中的application.properties無法加載問題定位技巧,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 【Java IO流】字節(jié)流和字符流的實例講解

    【Java IO流】字節(jié)流和字符流的實例講解

    下面小編就為大家?guī)硪黄綣ava IO流】字節(jié)流和字符流的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • idea如何關閉頁面顯示的瀏覽器圖標

    idea如何關閉頁面顯示的瀏覽器圖標

    這篇文章主要介紹了idea如何關閉頁面顯示的瀏覽器圖標問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • springboot打jar包之后下載文件的路徑問題

    springboot打jar包之后下載文件的路徑問題

    這篇文章主要介紹了springboot打jar包之后下載文件的路徑問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java虛擬機創(chuàng)建失敗的原因整理

    java虛擬機創(chuàng)建失敗的原因整理

    在本篇文章里小編給大家整理了關于創(chuàng)建java虛擬機失敗的解決方法和知識點,需要的朋友們可以參考學習下。
    2020-02-02
  • java int類型二維數(shù)組實現(xiàn)“楊輝三角”的完整實例

    java int類型二維數(shù)組實現(xiàn)“楊輝三角”的完整實例

    這篇文章主要給大家介紹了關于java int類型二維數(shù)組實現(xiàn)“楊輝三角”的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java httpClient介紹以及使用示例

    Java httpClient介紹以及使用示例

    這篇文章主要介紹了Java httpClient介紹以及使用示例,幫助大家更好的利用Java實現(xiàn)HTTP請求,感興趣的朋友可以了解下
    2020-10-10
  • Spring基于advisor配置aop過程解析

    Spring基于advisor配置aop過程解析

    這篇文章主要介紹了Spring基于advisor配置aop過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Spring如何使用注解的方式創(chuàng)建bean

    Spring如何使用注解的方式創(chuàng)建bean

    這篇文章主要介紹了Spring如何使用注解的方式創(chuàng)建bean,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java常用類之日期相關類使用詳解

    Java常用類之日期相關類使用詳解

    這篇文章主要為大家介紹了Java中常用類的日期相關類的用法教程,文中的示例代碼講解詳細,對我們學習Java有一定的幫助,需要的可以參考一下
    2022-08-08

最新評論