当前位置: 首页 > 知识库问答 >
问题:

java - Java + Mybatis Plus 插入数据时ID乱序原因?

夏高朗
2024-06-08

mysql自增,id设置成了自增key,有插入失败后id会乱序,比如原来是1,一直失败了5个,到了6。这时候正确插入一条,id返回6。再正确插入一条结果id是5,不知道问题出在哪?

用的是 java + mybatis plus + mysql 8 读写数据,手动无法重现

1.实体类

public class SaledData implements Serializable {    private static final long serialVersionUID = 1L;    @TableId(value = "id", type = IdType.AUTO)    private Long id;    private LocalDate recordDate; // 设置了唯一约束    ...}

2.从远程获取数据并入库

@Scheduled(cron = "0 0 1/1 \* \* ?") public void getSaledData() {    @Resource private ISaledDataService iSaledDataService;    ...    SaledData saledData = new SaledData();    ...    iSaledDataService.save(saledData); // 有时候数据会重复,会插入失败}

3.出现的错误结果

        "id": 158,        "createTime": "2024-05-13T04:00:08",        "recordDate": "2024-05-12"        "id": 160,        "createTime": "2024-05-12T20:00:12",        "recordDate": "2024-05-11"

共有1个答案

居乐池
2024-06-08

很奇怪的问题,跟踪日志发现像是@Scheduled调度线程有的卡住了,本该立即写入库的记录延迟了8个小时后才入库。

@Scheduled(cron = "0 0 1/1 ?", zone = "Asia/Shanghai")
调度加上时区就正常了,没明白是怎么导致的线程延迟

 类似资料:
  • 本文向大家介绍java数据结构之插入排序,包括了java数据结构之插入排序的使用技巧和注意事项,需要的朋友参考一下 插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。          插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。          如果输入数组已经是排好序的话,插入排

  • 问题内容: 我需要找出一种将带有字段的记录插入数据库的方法,但我陷入了困境。 有谁知道我该怎么做?现在我有类似的东西。 但是,当我运行类似这样的命令时,出现错误:值的字符串表示形式的语法不正确。 这是sql语句的样子: 谢谢 问题答案: 当然,这将使你的代码更好,但是要回答你的问题,你需要告诉的字符串表示形式。在中(你不指定数据库供应商的名称),使用以下函数将字符串日期转换为:

  • 问题内容: 我正在运行Tomcat应用程序,并且需要显示一些时间值。不幸的是,时间要花一个小时了。我调查了一下,发现我的默认TimeZone设置为: 而不是太平洋时区。当我尝试打印默认时区的显示名称时,这会进一步指示,并且显示为 “ GMT-08:00”,这似乎向我表明它未正确设置为美国太平洋时区。我在从Gutsy Gibbon升级的Ubuntu Hardy Heron上运行。 我是否可以更新配置

  • 清单插入(5);插入(10);插入(8);插入(20);插入(6); 如果现在打印列表,它应该打印为: 5

  • 我想使用Java将用户提供的输入插入Sql表,但不知道需要多少列。 如。 这个查询不起作用,因为我不知道列名,即ID,name。 我想要一个对任何插入数据都通用的查询。

  • 问题内容: 我想在Java中使用JDBC在数据库(本例中为Microsoft SQL Server)中进行记录。同时,我想获取插入ID。如何使用JDBC API实现此目的? 问题答案: 如果它是自动生成的密钥,那么你可以使用它。你需要使用与用于相同的名称进行调用。首先,你需要创建用于通知JDBC驱动程序以返回键的语句。 这是一个基本示例: 请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都