Как я могу сделать объект List OR ArrayList синглтоном в пакетном приложении Spring. Как я могу аннотировать поле как синглтон в java Spring Batch / Boot - PullRequest
0 голосов
/ 03 марта 2020

Я пишу пакетное приложение Spring, в котором есть блоки / задачи для обработки нескольких записей. Если у меня есть 100 записей для обработки, выполняется несколько блоков для обработки всех записей. Скажем, в первом чанке / задаче первые 25 записей сохраняются в ArrayList и обрабатываются, следующий чанк / задание выполняется для хранения и обработки следующих 25 записей и т. Д.

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

Я пытался используя Collection :: singletonList () , но он возвращает неизменный объект, а не объект Singleton. Я также пытался использовать аннотацию, такую ​​как @ Scope , но она дает ошибку компиляции - "@Scope" не применимо к полю "

Какой может быть возможный подход для решения этой проблемы проблема? Правильный ли мой подход к созданию одноэлементного списка для этого UseCase?

1 Ответ

0 голосов
/ 03 марта 2020

Stati c -Final не поможет, потому что stati c дважды загрузит класс для 2 задач, и экземпляр List будет создаваться при каждой загрузке класса. Но я нашел решение, и это сработало для меня: я создал bean-компонент, который будет возвращать объект списка и автоматически связываться по имени в классах, к которым я хочу получить доступ к этому bean-компоненту, так что каждый раз, когда он возвращает мне один и тот же экземпляр the ArrayList

Пример:

    Class MyList
    {
      @Bean
      public List getMyListInst()
      {
        return new ArrayList();
      }
    }

// Ниже класса, где мы хотим использовать приведенный выше список

    class UserClass
    {
       @Autowire
       private List getMyListInst; // Use the same name as given in above Bean

       ....
       ....

    }
...