Я разрабатываю хранилище метрик (Map), которое в основном собирает метрики о некоторых операциях, таких как
- смешивание
- Максимум
- прилавок
- время истекло [] и т. д.
Здесь Key — это имя метода, а value — его метрики.
Spring может помочь мне создать одноэлементный объект MetricStore, я использую ConcurrentHashMap, чтобы избежать состояния гонки, когда несколько запросов REST поступают параллельно.
Мой вопрос 1. Нужно ли мне сделать хранилище переменных MetricStore изменчивым? для улучшения видимости среди нескольких запросов. 2- Я использую Map в качестве базового класса и ConcurrentHashMap в качестве Implemetnation, влияет ли это на то, что Map не является ThreadSafe. -
@Component
class MetricStore{
public Map<String, Metric> store = new ConcurrentHashMap<>();
//OR public volatile Map<String, Metric> store = new ConcurrentHashMap<>();
}
@RestController
class MetricController{
@Autowired
private MetricStore metricStore;
@PostMapping(name="put")
public void putData(String key, Metric metricData) {
if(metricStore.store.containsKey(key)) {
// udpate data
}
else {
metricStore.store.put(key, metricData);
}
}
@PostMapping(name="remove")
public void removeData(String key) {
if(metricStore.store.containsKey(key)) {
metricStore.store.remove(key);
}
}
}