详解SpringBoot Mongo 自增长ID有序规则

 更新时间:2021年09月29日 15:39:39   作者:昵称为空C  
本文主要介绍springboot基于mongodb有序id生成,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

概述:本文主要介绍springboot基于mongodb有序id生成,如生成工单编号GD202109290001。单机情况下效率每秒生成5000个有序ID。

实现方式如下

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;
    }
}

到此这篇关于详解SpringBoot Mongo 自增长ID有序规则的文章就介绍到这了,更多相关SpringBoot Mongo 自增长ID内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java通俗易懂系列设计模式之模板模式

    Java通俗易懂系列设计模式之模板模式

    这篇文章主要介绍了Java通俗易懂系列设计模式之模板模式,想了解设计模式的同学,可以仔细看一下
    2021-04-04
  • Java验证码图片生成代码

    Java验证码图片生成代码

    这篇文章主要为大家详细介绍了Java验证码图片生成代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 解决SpringBoot log4j日志没生成的问题

    解决SpringBoot log4j日志没生成的问题

    这篇文章主要介绍了解决SpringBoot log4j日志没生成的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 一文讲解如何优雅的调试jar包

    一文讲解如何优雅的调试jar包

    在现实开发过程中,现场环境永远比开发环境复杂,下面这篇文章主要给大家介绍了关于如何优雅的调试jar包的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Spring超详细讲解事务和事务传播机制

    Spring超详细讲解事务和事务传播机制

    Spring事务的本质就是对数据库事务的支持,没有数据库事务,Spring是无法提供事务功能的。Spring只提供统一的事务管理接口,具体实现都是由数据库自己实现的,Spring会在事务开始时,根据当前设置的隔离级别,调整数据库的隔离级别,由此保持一致
    2022-06-06
  • 【MyBatis源码全面解析】MyBatis一二级缓存介绍

    【MyBatis源码全面解析】MyBatis一二级缓存介绍

    下面小编就为大家带来一篇【MyBatis源码全面解析】MyBatis一二级缓存介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 解决SpringCloud Config结合github无法读取配置的问题

    解决SpringCloud Config结合github无法读取配置的问题

    这篇文章主要介绍了解决SpringCloud Config结合github无法读取配置的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot详细列举常用注解的说明

    SpringBoot详细列举常用注解的说明

    在开发SpringBoot程序的过程中,有可能与其他业务系统进行对接开发,获取封装公共的API接口等等,下面这篇文章主要给大家介绍了关于SpringBoot常见的注解的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java实现按行分割大文件

    Java实现按行分割大文件

    这篇文章主要为大家详细介绍了Java实现按行分割大文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Java基础之FastJson详解

    Java基础之FastJson详解

    今天给大家复习Java基础FastJson,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05

最新评论