MongoDB posiada rozbudowany zestaw sterowników dla wielu języków programowania. W poniższym samouczku pokażemy różne niuanse łączenia się z MongoDB za pomocą sterownika Scala.
Instalacja sterownika
Sterownik Scala MongoDB można dodać do projektu przy użyciu następującej zależności -
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-scala-driver</artifactId> <version>1.0.1</version> </dependency> </dependencies>
Możesz również pobrać sterownik MongoDB Scala z jego strony github.
Sterownik Scala dla MongoDB, podobnie jak Java, zawiera wiele klas, aby ułatwić połączenia z instancją MongoDB.
Sterownik Scala dla MongoDB, podobnie jak Java, zawiera wiele klas, które ułatwiają połączenia z instancją MongoDB. Kliknij, aby tweetowaćZróbmy to krok po kroku:
Połączenie
Połączenie z instancją MongoDB można skonfigurować za pomocą klienta Mongo. MongoClient to klasa, która może służyć do zarządzania połączeniami z MongoDB. Najprostszym sposobem na utworzenie połączenia byłoby użycie -
val client:MongoClient=MongoClient("<server1>:27017")
Opcje takie jak uwierzytelnianie, numer portu itp. można ustawić w ciągu połączenia. Na przykład opcję zestawu replik można ustawić jako /?replicaSet=rs0
. Aby uzyskać pełną listę opcji, odwiedź opcje URI parametrów połączenia.
Alternatywnie do kontrolowania zachowania klienta Mongo można użyć klasy MongoClientSettings(). Klasa ClusterSettings służy do dodawania ustawień klastra do klasy Mongoclientsettings. Proste połączenie przy użyciu tych trzech klas może wyglądać następująco -
val clusterSettings: ClusterSettings=ClusterSettings.builder() .hosts(List(newServerAddress("mongodb2.example.com:27345") ,newServerAddress("mongodb1.example.com:20026")).asJava).build() val settings: <MongoClientSettings=MongoClientSettings.builder() .clusterSettings(clusterSettings)).build() val mongoClient: MongoClient=MongoClient(settings)
Połączenie domyślnie używa AsynchronousSocketChannel z Twojego systemu JDK , jeśli używasz SSL lub masz wersję JDK wcześniejszą niż 1.7, musisz użyć Netty, jak opisano w sekcji SSL.
SSL
Twoje połączenie z MongoDB może być zabezpieczone za pomocą SSL. Nasz inny post na blogu „Zabezpieczanie klastrów za pomocą SSL” opisuje znaczenie SSL.
Aby zweryfikować certyfikat przedstawiony przez serwer MongoDB, musisz dodać urząd podpisujący CA do magazynu zaufania systemu.
Będziesz także musiał dodać właściwości dla sterownika, aby użyć do tego celu biblioteki Netty zamiast AsynchronousSocketChannel. Będziesz musiał pobrać słoiki Netty i dodać je do swoich bieżących projektów, ponieważ zależność Scala ich nie pobiera. Potrzebne będą również następujące instrukcje importu -
import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings}
Połączenie z MongoDB przy użyciu SSL można wykonać w następujący sposób -
val settings: MongoClientSettings=MongoClientSettings.builder() .clusterSettings(clusterSettings) .sslSettings(SslSettings.builder().enabled(true).build()) .streamFactoryFactory(NettyStreamFactoryFactory()).build()
Jeśli masz problemy z połączeniem z serwerem, nazwa hosta na certyfikacie SSL serwera może być inna niż ta, którą określisz podczas budowania MongoClient. Możesz wyłączyć to ustawienie, używając. .invalidHostNameAllowed(true)
w ustawieniach SSL.
Uwierzytelnianie
Możesz użyć klasy MongoCredential, aby dodać dane logowania do MongoClientSettings. Typowe użycie klasy MongoCredentials będzie wyglądać następująco:
Ustawieniaval settings: MongoClientSettings = MongoClientSettings.builder() .clusterSettings(clusterSettings).credentialList(credential) .sslSettings(SslSettings.builder().enabled(true).build()) .streamFactoryFactory(NettyStreamFactoryFactory()) .build()
Pamiętaj, że po dodaniu więcej niż jednego hosta w ustawieniach klastra możesz dodać swoje poświadczenia jako listę. Na przykład możesz dodaćList(credential1,credential2).asJava
dla dwóch hostów.
Podsumowując to wszystko, jest kompletny kod do połączenia z zestawem replik z SSL w Scala -
import com.mongodb.MongoCredential import org.mongodb.scala.bson.collection.mutable.Document import org.mongodb.scala.{Completed, FindObservable, MongoClient, MongoClientSettings, MongoCollection, MongoDatabase, Observable,Observer, ReadPreference, ServerAddress} import org.mongodb.scala.connection.ClusterSettings import com.mongodb.MongoCredential._ import java.util.logging.{Level, Logger} import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings} import scala.collection.JavaConverters._ objectnewworld { def main(args: Array[String]): Unit = {val mongoLogger: Logger = Logger.getLogger("com.mongodb") mongoLogger.setLevel(Level.SEVERE); val clusterSettings: ClusterSettings = ClusterSettings.builder().hosts(List(new ServerAddress("example.com:27345"), new ServerAddress("example.com:20026")).asJava).build() val user: String = "testuser" val databasename: String = "scalatest" val password: Array[Char] = "<enter-a-password>".toCharArray val credential: MongoCredential = createCredential(user, databasename, password) val settings: MongoClientSettings = MongoClientSettings.builder() .clusterSettings(clusterSettings).credentialList(List(credential,credential).asJava).sslSettings(SslSettings.builder().enabled(true).build()) .streamFactoryFactory(NettyStreamFactoryFactory()).build() val mongoClient: MongoClient = MongoClient(settings) val database: MongoDatabase = mongoClient.getDatabase("scalatest") mongoClient.close() } }
Testowanie połączenia
Sterownik Scala Na stronach Pierwsze kroki znajdują się przykłady, w jaki sposób można przetestować połączenie.
Referencje:
Rozpoczęcie pracy ze scalą przy użyciu MongoDB
Mongo Scala API
Daj nam znać, jeśli masz problemy z połączeniem się z MongoDB przy użyciu sterownika Scala. Oferujemy opcje zarządzane dla wszystkich Twoich potrzeb MongoDB.