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

#spring-boot #global #pojo

#spring-boot #глобальный #pojo

Вопрос:

Я хотел бы инициировать простой POJO, который генерирует массив случайных строк при запуске (или при запуске приложения Spring Boot). Этот массив строк должен быть общим для каждого контроллера в приложении Spring Boot, и он не может отличаться для разных контроллеров. Класс и методы (этого общего POJO) являются внутренними для приложения Spring Boot и доступны путем вызова методов получения в методах контроллера (только).

Кроме того, я хотел бы избежать использования application.properties . Лучшим решением будет только java (без базы данных, такой как H2 или выгрузки POJO в файл). Кроме того, использование сеансов не поможет.

Что-то вроде этого помогло бы: http://www.masterspringboot.com/security/authentication/securing-spring-boot-with-in-memory-basic-authentication

Как я могу выполнить такой дизайн?

Моя идея состоит в том, чтобы просто использовать микросервис и запускать его отдельно, но я хотел бы подтвердить, есть ли что-то еще, что я могу сделать в рамках одного приложения Spring Boot.

Комментарии:

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

2. Нет, я не могу точно сказать, что я хочу сделать, потому что это слишком сложно. Извините. Я буду искать решение…

Ответ №1:

Вы можете создать одноэлементный класс, который содержит ваши значения:

 public class Main {

    public static void main(String[] args) {
        DataHolder dataHolder = DataHolder.getInstance();
        String[] arr = dataHolder.getArr();
    }
    
}


class DataHolder {
    private static DataHolder instance = null;

    private String[] arr = new String[10];

    public static DataHolder getInstance() {
        if (instance == null)
            instance = new DataHolder();

        return instance;
    }

    private DataHolder() {
        fillArray();
    }

    private void fillArray() {
        // use this method to fill your array
    }

    public String[] getArr() {
        return arr;
    }
}
  

Комментарии:

1. Нет, это не ответ (или уровень) Я ищу. Он должен находиться в рамках spring boot и вызываться из контроллера. Это должно быть хранилище в памяти.

2. Вы имеете в виду, что хотите создать @Component ? В spring boot нет внутреннего хранилища. Либо вы жестко кодируете строки в приложении, сохраняете его в файл или сохраняете в базе данных. Любой другой вариант заключается в том, что вы теряете данные.

3. @Component был бы решением, если бы мне не нужно было инициировать его на нескольких контроллерах. проблема в том, что каждый раз, когда я это делаю, генератор случайных чисел создает разные числа. Он должен быть согласован с несколькими контроллерами (глобальными)… итак, если есть способ сделать это, то это решение, которое мне нужно. В противном случае я просто запущу отдельный микросервис.

4. Хорошо, я нашел решение: baeldung.com/mapdb

Ответ №2:

Чтобы ответить на мой собственный вопрос, решение состояло в том, чтобы использовать память, предоставляемую MapDB, и генерировать все данные во время инициализации spring-boot…

https://mvnrepository.com/artifact/org.mapdb/mapdb

Пример исходного кода можно найти с помощью поисковых систем…