Как настроить Play!2.5 с ReactiveMongo
Я подключаюсь к MongoDB с помощью Scala, используя:
val driver = new MongoDriver
val connection = driver.connection(List("myhost"))
val db = connection.database("mydb")
Это прекрасно работает, но как интегрировать это с контроллером Play:
@Singleton
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents {
Нужно ли вводить кастом ReactiveMongoApi
с моей конфигурацией БД?
Или мне нужно изменить application.conf с моими настройками БД?
Я использую play 2.5 и http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html предоставляет этот код:
package api
import reactivemongo.api.{ DB, MongoConnection, MongoDriver }
trait ReactiveMongoApi {
def driver: MongoDriver
def connection: MongoConnection
def db: DB
}
Но я не уверен, как интегрировать его с моим приложением Play?
Я думаю, что я не знаю какой-то стандартный метод настройки источников БД с помощью Play! приложение?
1 ответ
Убедитесь, что у вас есть правильные конфиги в application.conf
play.modules.enabled += "play.modules.reactivemongo.ReactiveMongoModule"
mongodb.uri = "mongodb://localhost:27017/demodb"
Вы должны ввести и изменить код монго, как показано ниже
class MongoUserDao @Inject() (val reactiveMongoApi: ReactiveMongoApi)
extends UserDao {
// val users = reactiveMongoApi.db.collection[JSONCollection]("users") -- old API
// def find(userId:UUID):Future[Option[User]] =
// users.find(Json.obj("id" -> userId)).one[User] -- old code
def usersF = reactiveMongoApi.database.map(_.collection[JSONCollection]("users")) //new API
def find(userId:UUID):Future[Option[User]] = for {
users <- usersF
user <- users.find(Json.obj("id" -> userId)).one[User]
} yield user // new code
}
Если вы сравниваете новый API-код со старым API-кодом, реактивный MongoApi.database.map возвращает Future[Collection].
Спасибо пари