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.