【问题标题】:Optaplanner persistent data in session会话中的 Optaplanner 持久数据
【发布时间】:2020-11-24 22:44:46
【问题描述】:

每次我创建新技能、员工或合同时,数据库中都不会保存任何内容。当我从 intelliJ 重新运行应用程序,然后在 localhost 访问我的浏览器时,我之前在上一个会话中创建的所有数据都不再存在了。如何持久化我在 Optaplanner 中创建的新数据,以便在我重新运行应用程序时它会出现在 UI 上?

【问题讨论】:

  • 您是否保存到数据库? record.save()record.update()。如果是这样?数据库是否在您重新启动应用程序时运行?你的数据库是内存中的唯一数据库吗?
  • 我不确定它是否真的将其保存到数据库中。我是 optaplaner 的新手,我不知道如何检查。我只是下载了开源 optaplaner 的代码,并没有对其进行任何更改。
  • 您在使用 optaweb-employee-rostering 吗?还是 optaplanner 快速入门之一?还是 optaplanner 示例的护士排班?
  • 是的,我正在使用 optaweb-employee-rostering

标签: java database jpa persistence optaplanner


【解决方案1】:

我在solverManager 上使用solveAndListen,当它的分数提高时,它会调用save()。您需要在此处保留解决方案/结果。我正在使用 Hibernate 来做到这一点。我只是在数据库中更新最新的解决方案,而不是存储它的新版本,但这取决于你。请做好准备,在执行的早期可能会有很多调用来保存。我创建了一个额外的 API 来重置求解器,以便重新运行它。

【讨论】:

  • 感谢您的回答。现在我只想在浏览器上创建一个新技能,保存它,然后停止应用程序。当我重新运行应用程序时,转到浏览器,我想查看我在上一个会话中创建的技能。目前,我在上一个会话中创建的技能在新会话中不存在。
【解决方案2】:

假设这是关于 optaweb-employee-rostering:

开发application.properties 正在使用每次运行后都会删除的内存数据库

但是the production application properties 使用 PostgreSQL(您可以将其切换到您喜欢的数据库)。

OpenShift (=Kubernetes) 支持设置 optaweb-employee-rostering 和 PostgreSQL pod IIRC。要使用它,请运行runOnOpenshift.sh,即here

【讨论】:

  • 谢谢。是的,它是关于 optaweb-employee-rostering 的。我尝试了命令runOnOpenshift.sh,但我得到了这个答案:sh runOnOpenshift.sh readlink:非法选项--f用法:readlink [-n] [file ...]错误:需要安装oc客户端工具才能连接到 OpenShift。
  • ./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
猜你喜欢
  • 2013-04-07
  • 2021-09-23
  • 2019-04-20
  • 1970-01-01
  • 2019-03-14
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多