У мене є програма Play 2.5.3, яка використовує Slick для читання об'єкта з DB. Класи обслуговування побудовані таким чином:
class SomeModelRepo @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) {
val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig.driver.api._
val db = dbConfig.db
...
Тепер мені потрібні окремі сценарії Scala длявиконувати деякі операції у фоновому режимі. Мені потрібно підключитися до БД в них, і я хотів би повторно використовувати свої існуючі класи обслуговування, щоб читати об'єкти з БД.
Для створення об'єкта класу SomeModelRepo мені потрібно передати деякий DatabaseConfigProvider як параметр. Я намагався запустити:
object SomeParser extends App {
object testDbProvider extends DatabaseConfigProvider {
def get[P <: BasicProfile]: DatabaseConfig[P] = {
DatabaseConfigProvider.get("default")(Play.current)
}
}
...
val someRepo = new SomeModelRepo(testDbProvider)
однак у мене є помилка: "Немає запуску програми" у рядку з "(Play.current)". Більш того, метод, що існує в об'єкті Play, застарілий, і його слід замінити ДІ.
Чи існує який-небудь спосіб ініціалізувати мій об'єкт класу SomeModelRepo "в рамках автономного об'єкта SomeParser?
З повагою
Відповіді:
0 для відповіді № 1Коли ви запускаєте програму Play, модуль PlaySlick обробляє налаштування Slick для вас. З нею у вас є два вибору:
- вводити
DatabaseConfigProvider
і отримати туди водія або - зробити глобальний пошук за допомогою
DatabaseConfigProvider.get[JdbcProfile](Play.current)
, що не є кращим.
У будь-якому випадку, вам потрібно запустити програму Play! Оскільки це не так з вашими автономними скриптами, ви отримуєте помилку: "Немає запущеної програми".
Таким чином, вам доведеться використовувати стандартний підхід Slick за допомогою екземплярів db
безпосередньо з config:
val db = Database.forConfig("default")
У вас є багато прикладів у Шаблони Lightbend.
EDIT: Вибачте, я не читав ціле питання. Вам дійсно потрібно мати його як іншу програму? Ви можете запускати фонові операції, коли починається ваш додаток, наприклад тут. У цьому прикладі InitialData
клас вказується як нетерплячий синглтон, так це Вставити () метод запускається відразу після запуску додатка.