Как обрабатывать объект Slick db в akka - PullRequest
1 голос
/ 24 июня 2019

У меня есть программа, которая планирует задачу один раз в день. Каждый день он получает данные из внешнего API и сохраняет результаты в моей базе данных. Я решил сделать это с актерами akka, используя Slick для подключения к моей базе данных.

Как работает сторона приложения "вставка базы данных":

  • запросы на вставку данных адресованы субъекту «DatabaseInsertManager»
  • для каждого входящего запроса этот менеджер создает дочерний «DatabaseInserter», который фактически выполняет вызов к базе данных, учитывая запрос, предоставленный менеджером
  • когда запрос выполнен, вставщик умирает

Чтобы вызвать базу данных, у меня есть глобальная ссылка на объект Slick базы данных, который все эти DatabaseInserters используют. Мне интересно, если это правильный способ сделать это. Может ли эта глобальная ссылка умереть по какой-то причине? Или лучше создать новый объект БД для каждого DatabaseInverter, который использует db.close() в методе postStop? Последний вариант: я создаю объект db в начале ежедневного задания и закрываю его по завершении работы (обычно через 15 минут).

Мои гладкие зависимости

"com.typesafe.slick" %% "slick" % "3.2.3",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.3",

1 Ответ

0 голосов
/ 24 июня 2019

Если вы используете пул потоков и пул соединений для настройки slick при настройке Database, то вы сможете поделиться «глобальной ссылкой» без негативных последствий от долго работающего приложения.

...