MongoDB ha un ampio set di driver per molti linguaggi di programmazione. Nel seguente tutorial, ti mostreremo le varie sfumature della connessione a MongoDB usando il suo driver Scala.
Installazione del driver
Il driver Scala di MongoDB può essere aggiunto al tuo progetto usando la seguente dipendenza -
org.mongodb mongo-scala-driver 1.0.1
Puoi anche scaricare il driver MongoDB Scala dalla sua pagina github.
Scala Driver per MongoDB, come Java, viene fornito con più classi per facilitare le connessioni a un'istanza MongoDB.
Scala Driver per MongoDB, come Java, viene fornito con più classi per facilitare le connessioni a un'istanza MongoDB. Fai clic per twittareProcediamo passo dopo passo:
Connessione
È possibile configurare una connessione a un'istanza MongoDB utilizzando un client Mongo. MongoClient è una classe che può essere utilizzata per gestire le connessioni a MongoDB. Il modo più semplice per creare una connessione sarebbe usare -
val client:MongoClient=MongoClient(":27017")
Opzioni come autenticazione, numero di porta ecc. possono essere impostate nella stringa di connessione. Ad esempio, un'opzione di set di repliche può essere impostata come /?replicaSet=rs0
. Per un elenco completo delle opzioni, visita le opzioni dell'URI della stringa di connessione.
In alternativa, una classe MongoClientSettings() può essere utilizzata per controllare il comportamento di un client Mongo. Una classe ClusterSettings può essere utilizzata per aggiungere le impostazioni del cluster alla classe Mongoclientsettings. Una semplice connessione che utilizza queste tre classi può essere la seguente -
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(impostazioni)
La connessione per impostazione predefinita utilizza AsynchronousSocketChannel dai tuoi sistemi JDK, se stai utilizzando SSL o hai una versione JDK precedente alla 1.7 dovrai utilizzare Netty come descritto nella sezione SSL.
SSL
La tua connessione a MongoDB può essere protetta tramite SSL. L'altro nostro post sul blog "Securing cluster with SSL" descrive l'importanza di SSL.
Per convalidare il certificato presentato dal server MongoDB dovrai aggiungere la CA delle autorità di firma al truststore del sistema.
Sarà inoltre necessario aggiungere proprietà per il driver per utilizzare una libreria Netty invece di AsynchronousSocketChannel per questo scopo. Dovrai scaricare i vasi Netty e aggiungerli ai tuoi progetti attuali poiché la dipendenza da Scala non lo scarica. Avrai anche bisogno delle seguenti istruzioni di importazione -
import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings}
La connessione a MongoDB tramite SSL può essere effettuata come segue -
impostazioni val:MongoClientSettings=MongoClientSettings.builder().clusterSettings(clusterSettings).sslSettings(SslSettings.builder().enabled(true).build()).streamFactoryFactory(NettyStreamFactoryFactory()).build()
In caso di problemi di connessione al server, il nome host sul certificato SSL del server potrebbe essere diverso da quello specificato durante la creazione di MongoClient. È possibile disabilitare questa impostazione utilizzando. .invalidHostNameAllowed(true)
nelle tue Impostazioni SSL.
Autenticazione
Puoi utilizzare la classe MongoCredential per aggiungere credenziali a MongoClientSettings. Un utilizzo tipico della classe MongoCredentials sarà il seguente -
Tieni presente che quando hai aggiunto più di un host nelle impostazioni del cluster, puoi aggiungere le tue credenziali come elenco. Ad esempio, puoi aggiungereList(credential1,credential2).asJava
per due host.
Mettendo tutto insieme ecco il codice completo per connettersi a una replica impostata con SSL in Scala -
import com.mongodb.MongoCredentialimport org.mongodb.scala.bson.collection.mutable.Documentimport org.mongodb.scala.{Completed, FindObservable, MongoClient, MongoClientSettings, MongoCollection, MongoDatabase, Observable,Observer, ReadPreference, ServerAddress}import org.mongodb.scala.connection.ClusterSettingsimport 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] ="".toCharArrayval credenziali:MongoCredential =createCredent ial(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(impostazioni)val database:MongoDatabase =mongoClient.getDatabase("scalatest")mongoClient.close()}}
Testare la tua connessione
Driver Scala Le pagine per iniziare contengono esempi su come testare la tua connessione.
Riferimenti:
Iniziare con la scala utilizzando MongoDB
API Mongo Scala
Facci sapere se hai problemi di connessione a MongoDB utilizzando il suo driver Scala. Offriamo opzioni gestite per tutte le tue esigenze MongoDB.