Переменные экземпляра с веб-проектом - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю с веб-проектом Spring, но у меня возникла проблема с переменной экземпляра. Я использую Список для хранения данных отчета. Когда пользователь запрашивает этот отчет, я сохраняю этот Список, чтобы использовать его позже.для генерации Excel, но когда другой пользователь запрашивает тот же отчет, список переписывается с запрошенными новыми данными, а когда первый пользователь загружает отчет, он приходит с данными, которые были запрошены у второго пользователя.

Мой класс:

public class foo{
  List<Service> services;

  GetMapping({"/Report/Detail"})
  String getReport(Parameters params, ModelMap model){
    services = new ArrayList<>();
    //A lot of stuff
    services = serviceRepository(params);
    //A lot of stuff
    model.addAttribute("services",services)
    return "ReportDetail";
  }

  GetMapping({"/Report/Detail/Excel"})
  byte[] getExcelReport(){
    //Using the List<services> here to download the report
    //this List is getting modified by the second user
    byte[] excelReport = excelService(services);

    return excelReport;
  }

}

Я не хочу вносить серьезные изменения, потому что класс слишком большой, он отлично работает, но у меня есть эта проблема, и я ищу обходной путь.

Любой совет будет признателен.

Лучший!

1 Ответ

0 голосов
/ 13 февраля 2019

Каждый раз, когда пользователь отправляет запрос на /Report/Detail, вы перезаписываете список услуг.Если вы хотите, чтобы у каждого пользователя был свой список, используйте другой подход.Например, вы можете использовать карту, которая хранит пользователей (ключ должен однозначно идентифицировать пользователя) и их соответствующие списки.

Map<UserKey, List<Service>> services;

И позже в методе получите правильный список по

List<Service> userServices = services.get(userKey);

В случае распределенного приложения вам, конечно, придется использовать распределенную карту (например, Hazelcast или Ehcache)

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