#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
Пример исходного кода можно найти с помощью поисковых систем…