Постоянные данные Optaplanner в сеансе

#java #database #jpa #persistence #optaplanner

#java #База данных #jpa #постоянство #optaplanner

Вопрос:

Каждый раз, когда я создаю новый навык, сотрудника или контракт, в базе данных ничего не сохраняется. Когда я повторно запускаю приложение из IntelliJ, а затем захожу в свой браузер на localhost, всех данных, которые я ранее создал в предыдущем сеансе, там больше нет. Как я могу сохранить новые данные, которые я создаю в Optaplanner, чтобы при повторном запуске приложения они присутствовали в пользовательском интерфейсе?

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

1. Вы сохраняете в БД? record.save() или record.update() . Если да? Работает ли база данных при перезапуске приложения? Является ли ваша DB a только в памяти DB?

2. Я не уверен, действительно ли он сохраняет их в БД. Я новичок в optaplaner, и я не знаю, как это проверить. Я только что загрузил код optaplaner с открытым исходным кодом и не внес в него никаких изменений.

3. Используете ли вы optaweb-employee-rostering? Или один из optaplanner-quickstarts? Или составление реестра optaplanner-examples?

4. да, я использую optaweb-employee-rostering

Ответ №1:

Я использую solveAndListen on solverManager , и это вызывает save() , когда у него улучшенная оценка. Вам необходимо сохранить решение / результат здесь. Для этого я использую режим гибернации. Я просто обновляю последнее решение в базе данных, а не сохраняю его новую версию, но это зависит от вас. Просто будьте готовы к тому, что на ранних этапах выполнения может быть много вызовов для сохранения. Я создал дополнительный API для сброса решателя, чтобы я мог его перезапустить.

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

1. Спасибо за ваш ответ. Прямо сейчас я просто хочу создать новый навык в браузере, сохранить его, а затем остановить приложение. Когда я повторно запускаю приложение, открываю браузер, я хотел бы увидеть навык, который я создал в предыдущем сеансе. В настоящее время навык, который я создал в предыдущем сеансе, отсутствует в новом сеансе.

Ответ №2:

Предполагая, что речь идет об optaweb-employee-rostering:

Разработчик application.properties использует базу данных в памяти, которая удаляется после каждого запуска.

Но свойства производственного приложения используют PostgreSQL (и вы можете переключить его на предпочитаемую вами базу данных).

Поддержка OpenShift (= Kubernetes) настраивает как optaweb-реестр сотрудников, так и модули PostgreSQL IIRC. Чтобы использовать это, запустите runOnOpenshift.sh , который находится здесь .

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

1. Спасибо. да, речь идет об optaweb-employee-rostering. Я попробовал команду runOnOpenshift.sh , но я получаю такой ответ: sh runOnOpenshift.sh readlink: недопустимая опция — f использование: readlink [-n] [file …] ОШИБКА: для подключения к OpenShift необходимо установить инструмент oc client.

2. В то время как ./runOnOpenshift.sh выполняется, скрипт успешно запускает команду oc new-build --name backend --strategy=docker --binary , но он завершается на этой команде oc start-build backend --from-dir=${dir_backend} --follow Это сообщение об ошибке, которое я получаю сейчас. Uploading directory "optaweb-employee-rostering-backend" as binary input for the build ............................................................... Uploading finished Error from server (BadRequest): unable to wait for build backend-1 to run: timed out waiting for the condition