程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在java中在午夜重置计数器值?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在java中在午夜重置计数器值??

开发过程中遇到如何在java中在午夜重置计数器值?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在java中在午夜重置计数器值?的解决方法建议,希望对你解决如何在java中在午夜重置计数器值?有所启发或帮助;

我正在 Spring Boot 中编写功能以在一天内生成唯一的序列号/请求计数。为此,我正在创建一个变量并为其赋值,比如 Counter。要为每个请求提供唯一的序列号,如何在 Spring Boot 中使用多线程?是否也必须为此使用数据库表? 如何编写逻辑以每天午夜将此计数器值重置为零?

解决方法

我认为计数器总是会增加并且这是保证唯一性的方式?

如果是这样,有两个不同的问题:

  1. 如何在多线程环境中使用计数器?

答案是只要计数器本身“准备好”在多线程环境中工作就没有问题。

您可以将计数器创建为 bean 并将其注入到将成为入口点的控制器中:

@RestController // just to emphasize that its a controller
public class MyController {
   private final Counter counter;

   public MyController(Counter counter) {
      this.counter = counter;
   }
   @GetMapping
   public void foo() {
       counter.increase();
   }
} 

foo 方法可以被多个线程同时调用。

就计数器的实现而言,您可能需要考虑 java.util.concurrent.atomic.AtomicLongAtomicInteger。这个类可以在多线程环境中工作。或者,您可以选择带锁的自定义类。

关键是只要计数器本身被设计为从不同的线程同时调用就可以做到。

  1. 现在第二个问题是如何在每个午夜将计数器重置为零

这可以通过对 spring 的调度支持来完成:

创建一个每午夜运行的作业,注入计数器并添加一个将在午夜运行并重置计数器的 @Scheduled 方法。


@Component
public class MyCounterReseter {

   @Autowired
   private Counter counter;

   @Scheduled("0 0 * * *") // I haven't tested it but you get the idea
   public void resetCounter() {
      counter.reset(); // or call any other method depending on the actual counter implementation you'll choose
   }
}

不要忘记注释 @EnableScheduling,以便 Spring 处理 @Scheduled 注释

一般来说,以 this tutorial 为例,了解有关 spring 调度支持的更多信息。当然还有很多其他教程。

大佬总结

以上是大佬教程为你收集整理的如何在java中在午夜重置计数器值?全部内容,希望文章能够帮你解决如何在java中在午夜重置计数器值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: