Встречается на 2% собеседований по Java

Как организовать доступ к общим данным в эндпоинте на Spring, чтобы они были разделяемыми между всеми клиентами и потоками

Для разделяемых данных между всеми клиентами и потоками в Spring можно использовать:

  1. Singleton бины - Spring по умолчанию создаёт бины как синглтоны, их состояние будет общим для всех запросов:
java
@Service
public class SharedDataService {
    private Map<String, Object> sharedData = new ConcurrentHashMap<>();
    
    public void putData(String key, Object value) {
        sharedData.put(key, value);
    }
    
    public Object getData(String key) {
        return sharedData.get(key);
    }
}
  1. Статические поля - но нужно обеспечить потокобезопасность:
java
public class SharedData {
    private static final ConcurrentMap<String, Object> DATA = new ConcurrentHashMap<>();
    
    public static void put(String key, Object value) {
        DATA.put(key, value);
    }
}
  1. Кеширование через Spring Cache:
java
@Cacheable("sharedData")
public Object getSharedData(String key) {
    return fetchDataFromSlowSource(key);
}

Важно:

  • Используйте потокобезопасные коллекции (ConcurrentHashMap, CopyOnWriteArrayList)
  • Для изменяемых данных синхронизируйте доступ
  • Рассмотрите распределённые решения (Redis, Hazelcast) для кластера
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы