Java mule中唯一序列号的生成

Java mule中唯一序列号的生成,java,mule,sequence,Java,Mule,Sequence,我在我的项目中有一个要求。 我想生成一个递增的唯一序列号,该序列号将映射到输出xml文件的特定字段(交换id)。 客户希望围绕此号码生成一些警报。因此,他们非常明确的数字应该是 1.独特的2。增加 现在我有两种方法来解决这个问题 我将在oracle sequence的帮助下生成一个序列。但问题是,他们不想不必要地访问数据库 将在java中借助静态变量进行genearate。但我觉得这不是充分的证据。我认为如果我的应用程序或服务器重新启动,那么静态变量将再次从0开始。在这种情况下,数字将不是唯一的

我在我的项目中有一个要求。 我想生成一个递增的唯一序列号,该序列号将映射到输出xml文件的特定字段(交换id)。 客户希望围绕此号码生成一些警报。因此,他们非常明确的数字应该是
1.独特的2。增加

现在我有两种方法来解决这个问题

  • 我将在oracle sequence的帮助下生成一个序列。但问题是,他们不想不必要地访问数据库
  • 将在java中借助静态变量进行genearate。但我觉得这不是充分的证据。我认为如果我的应用程序或服务器重新启动,那么静态变量将再次从0开始。在这种情况下,数字将不是唯一的
  • 所以我的问题是,如果我们能在mulesoft很容易地得到这个东西,或者任何想法都是值得赞赏的


    TIA。

    使用静态字段,但从数据库中获取值。如果不要求数字必须连续,则每次可以将数据库值增加f.e.100,然后只需每隔需要生成的第100个数字点击一次数据库。

    从数据库获取序列值并不符合“不必要地点击数据库”的条件

    为了以高效且可扩展的方式获得唯一的序列值,它是必需的

    虽然序列争用在Oracle数据库中并非闻所未闻,但它通常不是繁忙数据库中的最大问题。最容易解决的问题之一是:增加序列缓存


    如果您确实知道(而不仅仅是假设)您将遇到性能问题,那么您可能会考虑将序列增量增加到一个非常高的数字。然后,当您启动应用程序时,您可以调用
    nextval
    ,获得您可以在Java代码中分发的数字上限,而不必冒任何风险。如果达到该限制,请再次调用
    nextval
    ,以获取下一段数字。本质上是将静态变量与Oracle提供的序列持久性相结合


    但是,我再次表示:我怀疑为每个数字调用序列会很快给您带来麻烦(如果是这样的话,您可能会遇到其他更大的性能问题)另一个关于为什么最好使用类似数据库的东西的观点是,静态变量只在您有一个JVM实例时才起作用

    如果您需要通过更多节点进行扩展,这将成为一种非常脆弱的模式(除非您能够通过使用GUID来避免,但在这种情况下,这将无法满足您的递增需求)

    你可以使用另一种高效的机制,比如memcache或Redis,而不是“thedatabase”