Я использую Slick 3.1.1, и я хотел бы реализовать свои собственные вещи на транзакции Slick.Собственный материал в транзакции Slick
def findSomeProducts = table.getSomeProducts() //db operation
def productTableUpdate = doSomeStuff1() //db operation
def priceTableUpdate = doSomeStuff2() //db operation
def updateElasticCache = updateIndexOfProduct() //this is not a database operation
У меня есть эти функции выборки. Во-первых, я получаю некоторые продукты из db и после обновления таблиц. В конце мне нужно запустить метод updateElasticCache. Если метод updateElasticCache терпит неудачу, я хотел бы откатить целые db-файлы.
Я не могу использовать (for { ... } yield()).transactionally
этот код, потому что он не применим для моих случаев. Это «транзакционно» ждет действия db. Но я хочу добавить еще одну функциональность, которая не является db-процессом.
Возможно ли это? Как я могу это достичь?
Спасибо за ваш ответ. Я пытаюсь реорганизовать свои функции. Возвращаемый тип функции db-operation отличается от DBIO. Вместо DBIO [T] он возвращает JdbcProfile.this.DriverAction [Int, NoStream, Write]. ' def testUpdate (productId: Int, текст: String): JdbcProfile.this.DriverAction [Int, NoStream, Write] = { val q = для {p <- Продукты, если p.id === productId} yield (p.text) q.update (текст) } ' Извините, я только начал изучать Слик сегодня. Я не знаю, это логичный вопрос? – borney
@sydboraa 'updateElasticCache()' должен возвращать 'Future [_]', а затем вы можете обернуть его в 'DBIO.from (updateElasticCache())'. или 'def updateElasticCache: DBIO [_] = DBIO.из {doSomething()} '' doSomething' в свою очередь возвращает 'Future [_]'. – pamu
@sydboraa 'DBIO' - это псевдоним типа' DriverAction' – pamu