2016-12-22 2 views
0

Ich erstelle derzeit eine Spring Boot Web-Anwendung mit mongodb. Vor Ort kann ich meine Anwendung ausführen und Daten werden abgerufen und gespeichert. aber nicht auf Wolkengießerei. Irgendwelche Tipps, Links oder irgendetwas, um mir zu helfen, wird sehr geschätzt!Spring Boot und wie konfigurieren Sie Verbindungsdetails zu MongoDB in Cloud Foundry?

Problem

Als ich es in Cloud Foundry geschoben, bin ich nicht in der Lage meine mongodb zu verbinden. Ich weiß, dass wir etwas in der Cloud-Foundry konfigurieren müssen, damit es funktioniert. Ich habe versucht, die mongodb PCF, auch wenn ich es an meine Anwendung binden es noch nicht meine Anwendung läuft. Ich habe das Internet durchforstet und versucht, die richtigen Konfigurationen dafür zu finden.

Andere Gedanken

ich nie einen Benutzernamen und ein Passwort einrichten, wenn ich MongoDB wurde mit. Ich benutze gerade localhost mit port27017. Vielleicht muss ich die Anmeldeinformationen auf meinem V_CAP oder env Variablen konfigurieren, aber ich kann diese auf der Benutzeroberfläche von cloudfoundry.com nicht bearbeiten. Würde es eine Eingabeaufforderung geben, um diese Variablen in cf zu konfigurieren? Ich mehrere Dokumente überprüfen, aber ich bin unklar, wo diese Bohnen hinzufügen, in die Konfigurationsdatei oder würde es helfen, auf der Wolke Gießerei erhalten mongodb laufen Doc1

Fehler der Verbindung auf Wolke Gießerei

OUT org.springframework.beans.factory.UnsatisfiedDependencyException: Fehler beim Erstellen einer Bean mit dem Namen 'indexController': Unzufrieden Abhängigkeit ausgedrückt durch Feld 'apL'; verschachtelte Ausnahme ist org.springframework.beans.factory.BeanCreationException: Fehler Erstellen von Bean mit dem Namen 'appPortList': Aufruf von init-Methode fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.dao.DataAccessResourceFailureException: Zeitüberschreitung nach 30000 ms während auf einen Server warten, der entspricht ReadPreferenceServerSelector {readPreference = primäre}. Client-Sicht Cluster-Status ist {Typ = UNKNOWN, Server = [{Adresse = 127.0.0.1: 27017, Typ = UNKNOWN, Status = CONNECTING, Ausnahme = {com.mongodb.MongoSocketOpenException: Ausnahmeeröffnung Socket}, verursacht von {java.net.ConnectException: Verbindung abgelehnt}}]; verschachtelte Ausnahme ist com.mongodb.MongoTimeoutException: Zeitüberschreitung nach 30000 ms, während auf einen Server warten, der entspricht ReadPreferenceServerSelector {readPreference = primär}. Client-Sicht Cluster-Status ist {Typ = UNKNOWN, Server = [{Adresse = 127.0.0.1: 27017, Typ = UNKNOWN, Status = CONNECTING, Ausnahme = {com.mongodb.MongoSocketOpenException: Ausnahmeeröffnung Socket}, verursacht von {java.net.ConnectException: Connection refused}}]

+0

Sind Sie auf PWS (Pivotal Web Services) oder auf Bluemix oder auf Swisscom? Die Verwendung von mongodb könnte auf diesen PaaSes etwas anders sein. – user152468

+0

PWS, Wie kann ich mongodb Benutzername und Passwort erstellen, so dass ich es in diese Variablen übergeben kann. – Jesse

+0

Benutzername und Passwort sollten von PWS für Sie erstellt werden. Sie können sie sehen, indem Sie die Umgebung Ihrer Anwendung überprüfen - z. durch Ausführen von 'cf env ' – user152468

Antwort

0

Theoretisch Frühling Boot Cloud Connectors sollte dies für Sie tun, aber ich habe Probleme mit ihm in der Vergangenheit hatten.

Alternativ müssen Sie eine Spring Bean hinzufügen, die AbstractMongoConfiguration erweitert. In dieser Konfiguration müssen Sie den Host, den Port, den Benutzernamen, den Datenbanknamen und das Kennwort eingeben, die Sie in der Umgebungsvariablen VCAP_SERVICES finden.

Sie könnten dies automatisch einfügen, indem Sie den Wert der VCAP_SERVICES Variable immer System.getenv („VCAP_SERVICES“) verwendet und analysieren es mit JACKSON oder einer anderen JSON-Bibliothek.

@Configuration 
@Profile("cloud") 
public class DatabaseConfiguration extends AbstractMongoConfiguration { 

    @Bean 
    public ValidatingMongoEventListener validatingMongoEventListener() { 
     return new ValidatingMongoEventListener(validator()); 
    } 

    @Bean 
    public LocalValidatorFactoryBean validator() { 
     return new LocalValidatorFactoryBean(); 
    } 

    @Override 
    public String getDatabaseName() { 
     return this.databaseName; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>(); 
     ServerAddress address = new ServerAddress("my_host", 7777); 
     serverAddresses.add(address); 
     return new MongoClient(serverAdresses, 
       singletonList(
         MongoCredential.createCredential(
           "my_user_name", 
           "my_database_name", 
           "my_password".toCharArray() 
         ) 
       ) 
     ); 
    } 
} 

In Bezug auf Ihre "anderen Gedanken". Es gibt keine Möglichkeit, die von CloudFoundry bereitgestellte Variable VCAP_SERVICES zu bearbeiten. Stattdessen sollte es von Ihrer Anwendung gelesen werden, sodass Ihre Anwendung weiß, wo die mongodb-Instanz zu finden ist, die CF für sie bereitgestellt hat.

Sie können Ihrer Anwendung jedoch weitere Umgebungsvariablen hinzufügen, indem Sie 'cf set-env' verwenden. Aber das wird nicht helfen, Ihr Problem zu lösen, soweit ich das beurteilen kann.

+0

Danke! Wo kann ich mehr über diese Konfiguration nachlesen? Ich habe Ihr Skript oben implementiert, ich habe einen Fehler bei der Rückgabe von this.DatabaseName und SingletonList. – Jesse

0

Es gibt einen wirklich guten Blogbeitrag über die Bindung an Datendienste auf CF auf dem Spring Framework Blog: https://spring.io/blog/2015/04/27/binding-to-data-services-with-spring-boot-in-cloud-foundry.

Dieser Beitrag verwendet in seinen Beispielen relational mit JPA, aber alles gezeigte funktioniert auch für MongoDB.

+0

Ich stolperte über Ihr GitHub-Beispiel, Sie banden mongodb mit Ihrer Anwendung mit Cloud-Profil. Wohin gehen die Daten, nachdem du mongodb mit deiner App verknüpft hast? Ich versuche alle meine gespeicherten Daten zu finden. – Jesse

+0

Sie möchten wahrscheinlich eine MongoDbFactory-Bean in den App-Kontext importieren, wie in diesem Beispiel: https://github.com/cloudfoundry-samples/spring-music/blob/master/src/main/java/org/cloudfoundry/samples /music/config/data/MongoCloudConfig.java. Erstellen Sie dann eine Spring Data MongoDB-Repository-Bean wie in diesem Beispiel: https://github.com/cloudfoundry-samples/spring-music/blob/master/src/main/java/org/cloudfoundry/samples/music/repositories/mongodb /MongoAlbumRepository.java. Die Repository-Bean verwendet die MongoDbFactory-Bean. –

+0

Ja, dass die Beispiele, die ich gesehen habe, wo kann ich auf die gespeicherten Daten zugreifen? Wie auf einem lokalen Rechner kann ich die Kommandozeile db.collection.find() benutzen und alle meine Werte abfragen. Wie kann ich das Gleiche für die Mongo-Cloud tun? \ – Jesse

Verwandte Themen