**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我正在springboot中编写一个函数,以在一天内生成一个唯一的序列号/请求计数。为此,我正在创建一个变量,并为其赋值,比如说计数器。为了给每个请求提供一个唯一的序列号,我如何在springboot中使用多线程?为此使用数据库表也是强制性的吗?我怎样才能写逻辑在每天午夜将这个计数器值重置为零?
**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我正在springboot中编写一个函数,以在一天内生成一个唯一的序列号/请求计数。为此,我正在创建一个变量,并为其赋值,比如说计数器。为了给每个请求提供一个唯一的序列号,我如何在springboot中使用多线程?为此使用数据库表也是强制性的吗?我怎样才能写逻辑在每天午夜将这个计数器值重置为零?
1条答案
按热度按时间35g0bw711#
我假设计数器总是增加的,这就是保证唯一性的方法?
如果是,有两个不同的问题:
如何在多线程环境中使用计数器?
答案是,只要计数器本身“准备好”在多线程环境中工作,就没有问题。
您可以创建一个作为bean的计数器,并将其注入到作为入口点的控制器中:
这个
foo
方法可以由多个线程同时调用。在计数器的实现方面,您可能需要考虑
java.util.concurrent.atomic.AtomicLong
或者AtomicInteger
也许 吧。这个类可以在多线程环境中工作。或者,您可以选择带有锁的自定义类。关键是,只要计数器本身被设计成从不同线程同时调用,就可以这样做。
现在第二个问题是如何在每个午夜将计数器重置为零
这可以通过对spring的调度支持来实现:
创建一个每午夜运行的作业,注入计数器并添加
@Scheduled
方法,它将在午夜运行并重置计数器。别忘了注解
@EnableScheduling
所以@Scheduled
注解将由spring处理一般来说,以本教程为例,了解有关spring中的调度支持的更多信息。当然还有很多其他的教程。