Sobes.tech
Junior — Middle

Da li može doći do problema prilikom korišćenja @RestController sa brojačem u jednom Endpoint-u kada više klijenata istovremeno šalje zahteve?

sobes.tech АИ

Одговор од АИ

Да, может возникнуть проблема с состоянием счетчика при одновременных запросах от множества клиентов, если счетчик хранится как обычная переменная в контроллере.

@RestController в Spring по умолчанию является singleton, то есть один экземпляр на все запросы. Если счетчик — это поле класса, то при параллельном доступе без синхронизации возможны состояния гонки (race conditions), что приведет к некорректному подсчету.

Чтобы избежать этой проблемы, нужно использовать:

  • Потокобезопасные типы данных, например, AtomicInteger.
  • Синхронизацию доступа к счетчику (synchronized, ReentrantLock).
  • Хранение состояния вне контроллера, например, в базе данных или кэше с поддержкой атомарных операций.

Пример с AtomicInteger:

@RestController
public class CounterController {
    private AtomicInteger counter = new AtomicInteger(0);

    @GetMapping("/count")
    public int increment() {
        return counter.incrementAndGet();
    }
}