#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