Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中如何在午夜重置计数器值?_Java_Spring_Multithreading_Spring Boot - Fatal编程技术网

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

在java中如何在午夜重置计数器值?,java,spring,multithreading,spring-boot,Java,Spring,Multithreading,Spring Boot,我正在SpringBoot中编写功能,以在一天内生成唯一的序列号/请求计数。为此,我正在创建一个变量(比如计数器)并为其赋值。要为每个请求提供一个唯一的序列号,如何在Spring Boot中使用多线程?是否也必须为此使用数据库表? 如何编写逻辑,每天午夜将计数器值重置为零?我假设计数器总是增加,这是保证唯一性的方法 如果是,则有两个不同的问题: 如何在多线程环境中使用计数器 答案是,只要计数器本身“准备好”在多线程环境中工作,就没有问题 您可以创建一个作为bean的计数器,并将其注入作为入口点的

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

我假设计数器总是增加,这是保证唯一性的方法

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

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

    您可以创建一个作为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 .UTI.Orth.Ac原子。AtomicLong < /COD>或<代码> AtomicInteger < /C>。此类可以在多线程环境中工作。或者,您可以选择带有锁的自定义类

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

  • 现在第二个问题是如何在每个午夜将计数器重置为零
  • 这可以通过对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
    ,这样
    @Scheduled
    注释将由Spring处理


    一般来说,例如,考虑在Spring中了解更多关于调度支持的内容。当然还有很多其他教程。

    可能会显示一些代码吗?