MongoDB heeft voor veel programmeertalen een uitgebreide driver set. In de volgende zelfstudie laten we u de verschillende nuances zien van het verbinden met MongoDB met behulp van het Scala-stuurprogramma.
Installatie stuurprogramma
Het Scala-stuurprogramma van MongoDB kan aan uw project worden toegevoegd met behulp van de volgende afhankelijkheid -
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-scala-driver</artifactId> <version>1.0.1</version> </dependency> </dependencies>
Je kunt ook het MongoDB Scala-stuurprogramma downloaden van de github-pagina.
Scala Driver voor MongoDB wordt, net als Java, geleverd met meerdere klassen om verbindingen met een MongoDB-instantie te vergemakkelijken.
Scala Driver voor MongoDB wordt, net als Java, geleverd met meerdere klassen om verbindingen met een MongoDB-instantie te vergemakkelijken. Klik om te TweetenLaten we dit stap voor stap doen:
Verbinding
Een verbinding met een MongoDB-instantie kan worden opgezet met behulp van een Mongo-client. MongoClient is een klasse die kan worden gebruikt om verbindingen met MongoDB te beheren. De eenvoudigste manier om een verbinding tot stand te brengen is door -
. te gebruikenval client:MongoClient=MongoClient("<server1>:27017")
Opties zoals authenticatie, poortnummer etc. kunnen worden ingesteld in de verbindingsreeks. Een replicasetoptie kan bijvoorbeeld worden ingesteld als /?replicaSet=rs0
. Ga voor een volledige lijst met opties naar de URI-opties van de verbindingsreeks.
Als alternatief kan een MongoClientSettings()-klasse worden gebruikt om het gedrag van een Mongo-client te regelen. Een ClusterSettings-klasse kan worden gebruikt om clusterinstellingen toe te voegen aan de Mongoclientsettings-klasse. Een eenvoudige verbinding met deze drie klassen kan als volgt zijn -
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)
De verbinding gebruikt standaard AsynchronousSocketChannel van uw systemen JDK , als u SSL gebruikt of een JDK-versie ouder dan 1.7 heeft, moet u Netty gebruiken zoals beschreven in de SSL-sectie.
SSL
Uw verbinding met MongoDB kan worden beveiligd met SSL. In onze andere blogpost 'Clusters beveiligen met SSL' wordt het belang van SSL beschreven.
Om het door de MongoDB-server gepresenteerde certificaat te valideren, moet u de CA van de ondertekeningsautoriteiten toevoegen aan de trust store van het systeem.
U moet ook eigenschappen voor het stuurprogramma toevoegen om voor dit doel een Netty-bibliotheek te gebruiken in plaats van AsynchronousSocketChannel. U moet de Netty-potten downloaden en toevoegen aan uw huidige projecten, omdat de Scala-afhankelijkheid deze niet downloadt. U hebt ook de volgende importverklaringen nodig -
import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings}
De verbinding met MongoDB met behulp van SSL kan als volgt worden gemaakt -
val settings: MongoClientSettings=MongoClientSettings.builder() .clusterSettings(clusterSettings) .sslSettings(SslSettings.builder().enabled(true).build()) .streamFactoryFactory(NettyStreamFactoryFactory()).build()
Als u problemen ondervindt bij het verbinden met de server, kan de hostnaam op het SSL-certificaat van uw server anders zijn dan de naam die u opgeeft tijdens het bouwen van de MongoClient. U kunt deze instelling uitschakelen door te gebruiken. .invalidHostNameAllowed(true)
in uw SSL-instellingen.
Verificatie
U kunt de MongoCredential-klasse gebruiken om inloggegevens toe te voegen aan uw MongoClientSettings. Een typisch gebruik van de MongoCredentials-klasse is als volgt:
val settings: MongoClientSettings = MongoClientSettings.builder() .clusterSettings(clusterSettings).credentialList(credential) .sslSettings(SslSettings.builder().enabled(true).build()) .streamFactoryFactory(NettyStreamFactoryFactory()) .build()
Houd er rekening mee dat wanneer u meer dan één host hebt toegevoegd in de clusterinstellingen, u uw inloggegevens als een lijst kunt toevoegen. U kunt bijvoorbeeld List(credential1,credential2).asJava
voor twee hosts.
Alles bij elkaar hier is de volledige code om verbinding te maken met een replicaset met SSL in 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() } }
Uw verbinding testen
Scala-stuurprogramma Aan de slag-pagina's bevat voorbeelden van hoe u uw verbinding kunt testen.
Referenties:
Aan de slag met scala met MongoDB
Mongo Scala-API
Laat het ons weten als u problemen ondervindt bij het verbinden met MongoDB met behulp van de Scala-driver. We bieden beheerde opties voor al uw MongoDB-behoeften.