如何在 akka 中处理 Slick db 对象
How to handle Slick db object in akka
我有一个程序每天安排一次任务。
每天,它都会从外部 API 获取数据并将结果存储到我的数据库中。我选择使用 akka actor 来完成此操作,使用 Slick 连接到我的数据库。
应用程序 "database inserting" 端的工作方式如下:
- 插入数据的请求被发送给 "DatabaseInsertManager" 参与者
- 对于每个传入请求,此管理器都会创建一个子项 "DatabaseInserter",根据管理器
提供的请求,该子项将实际调用数据库
- 请求完成后,插入器死亡
为了调用数据库,我有一个对数据库 Slick 对象的全局引用,这些 DatabaseInserter 都使用该对象。我想知道这是否是正确的做法。这个全球参考会因为某种原因而死亡吗?
或者,为每个在 postStop
方法中使用 db.close()
的 DatabaseInverter 创建一个新的 DB 对象是否更好?
最后一个选项是:我在日常工作开始时创建一个 db 对象,并在工作完成时关闭它(通常是 15 分钟后)。
我灵活的依赖是
"com.typesafe.slick" %% "slick" % "3.2.3",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.3",
如果您在配置 Database
时使用 slick 的 thread pool & connection pool 功能,那么您应该能够共享一个 "global reference" 而不会因较长的 运行 应用程序而产生负面影响.
我有一个程序每天安排一次任务。 每天,它都会从外部 API 获取数据并将结果存储到我的数据库中。我选择使用 akka actor 来完成此操作,使用 Slick 连接到我的数据库。
应用程序 "database inserting" 端的工作方式如下:
- 插入数据的请求被发送给 "DatabaseInsertManager" 参与者
- 对于每个传入请求,此管理器都会创建一个子项 "DatabaseInserter",根据管理器 提供的请求,该子项将实际调用数据库
- 请求完成后,插入器死亡
为了调用数据库,我有一个对数据库 Slick 对象的全局引用,这些 DatabaseInserter 都使用该对象。我想知道这是否是正确的做法。这个全球参考会因为某种原因而死亡吗?
或者,为每个在 postStop
方法中使用 db.close()
的 DatabaseInverter 创建一个新的 DB 对象是否更好?
最后一个选项是:我在日常工作开始时创建一个 db 对象,并在工作完成时关闭它(通常是 15 分钟后)。
我灵活的依赖是
"com.typesafe.slick" %% "slick" % "3.2.3",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.3",
如果您在配置 Database
时使用 slick 的 thread pool & connection pool 功能,那么您应该能够共享一个 "global reference" 而不会因较长的 运行 应用程序而产生负面影响.