在java中如何在午夜重置计数器值?
我正在SpringBoot中编写功能,以在一天内生成唯一的序列号/请求计数。为此,我正在创建一个变量(比如计数器)并为其赋值。要为每个请求提供一个唯一的序列号,如何在Spring Boot中使用多线程?是否也必须为此使用数据库表?在java中如何在午夜重置计数器值?,java,spring,multithreading,spring-boot,Java,Spring,Multithreading,Spring Boot,我正在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>。此类可以在多线程环境中工作。或者,您可以选择带有锁的自定义类
关键是,只要计数器本身被设计为从不同线程同时调用,就可以这样做@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中了解更多关于调度支持的内容。当然还有很多其他教程。可能会显示一些代码吗?