即使服务器重新启动,如何生成唯一整数

时间:2017-06-22 05:33:02

标签: java

每次从客户端接收特定的发布请求时,服务器都应生成一个唯一的整数来生成链接(uri:website / question / id / details)并将整数作为索引(主键)存储在数据库中。我已经尝试int idForUri = UniqueInteger.uri.incrementAndGet();但是如果服务器重新启动,这不起作用。我该如何解决这个问题?

class UniqueInteger {
    public static AtomicInteger uri = new AtomicInteger(212043);
}

添加
表格
------------
id int(11)unsigned auto_increment主键
title varchar(50)
内容文本
uri varchar(50)

来自浏览器的每个特定帖子请求都会导致服务器生成新的uri。用户通过uri访问该页面,其中包含“website / question / id / details”(id是主键)。但是,如果不知道新的身份证,那么uri也是未知的。例如,21000是表文章中存在的最大ID。所以需要insert into article(title, content, uri) values (?, ?, 'website/questions/21001/details')。但是服务器因为自动递增而不知道21001的值(可能在执行select之前导致sql insert语句)。

用户通过在浏览器中键入特定的uri来访问每个文章页面,一个HTTP请求。服务器应该知道哪个文章只是由接收链接发送。所以我将id添加到uri(就像SO中的uri,这是问题/问题ID /标题)。然后通过解析uri中的id,服务器可以找到特定的文章。
如何修复设计?

2 个答案:

答案 0 :(得分:3)

使用数据库中的SEQUENCE或等效概念。

答案 1 :(得分:1)

根据您的评论,最简单的方法就是让数据库插入按照正常情况使用自动生成的密钥

更改getUri方法以追加或将id字段插入其中

return String.format ("website/question/%d/details", id);