2014-05-07 16 views
47

Będąc nowym użytkownikiem Spring Boot, zastanawiam się, w jaki sposób mogę skonfigurować szczegóły połączenia dla MongoDB. Próbowałem normalnych przykładów, ale żaden nie obejmuje szczegółów połączenia.Spring Boot i jak skonfigurować szczegóły połączenia z MongoDB?

Chcę określić bazę danych, która ma być używana oraz adres/port hosta, na którym działa MongoDB.

Wszelkie wskazówki lub porady?

Odpowiedz

55

Wystarczy zacytować Boot Docs:

Można ustawić spring.data.mongodb.uri własność, aby zmienić adres URL, lub alternatywnie określić host/port. Na przykład, może zadeklarować następujące w application.properties:

spring.data.mongodb.host=mongoserver 
spring.data.mongodb.port=27017 

Wszystkie dostępne opcje spring.data.mongodb prefiksem są pola MongoProperties:

private String host; 

private int port = DBPort.PORT; 

private String uri = "mongodb://localhost/test"; 

private String database; 

private String gridFsDatabase; 

private String username; 

private char[] password; 
+0

Hej, chciałbym zrobić to samo dla normalnego webapp przy użyciu Wiosna bagażnik? Gdzie mogę znaleźć plik application.properties? – Theo

+0

Musisz napisać to sam, jeśli nie chcesz polegać na domyślnych opcjach: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config. html –

+0

Zauważ, że obecnie istnieje problem, jeśli chcesz ustawić pole hasła jako char []. Zamiast tego użyj pola uri. Zobacz u dołu tego raportu o błędzie: https://github.com/spring-projects/spring-boot/issues/536 – grahamrb

11

w projekcie maven utworzyć plik src/main/resources/application.yml z następujących treść:

spring.profiles: integration 
# use local or embedded mongodb at localhost:27017 
--- 
spring.profiles: production 
spring.data.mongodb.uri: mongodb://<user>:<passwd>@<url>:<port>/<dbname> 

Spring Boot automatycznie użyje tego pliku do skonfigurowania aplikacji. Następnie można uruchomić aplikację startową wiosną albo z profilu integracyjnym (i korzystać z lokalnej MongoDB)

java -jar -Dspring.profiles.active=integration your-app.jar 

lub profilu produkcji (i wykorzystać swoją produkcję MongoDB)

java -jar -Dspring.profiles.active=production your-app.jar 
10

Można zdefiniować więcej szczegóły poprzez rozszerzenie AbstractMongoConfiguration.

@Configuration 
@EnableMongoRepositories("demo.mongo.model") 
public class SpringMongoConfig extends AbstractMongoConfiguration { 
    @Value("${spring.profiles.active}") 
    private String profileActive; 

    @Value("${spring.application.name}") 
    private String proAppName; 

    @Value("${spring.data.mongodb.host}") 
    private String mongoHost; 

    @Value("${spring.data.mongodb.port}") 
    private String mongoPort; 

    @Value("${spring.data.mongodb.database}") 
    private String mongoDB; 

    @Override 
    public MongoMappingContext mongoMappingContext() 
     throws ClassNotFoundException { 
     // TODO Auto-generated method stub 
     return super.mongoMappingContext(); 
    } 
    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient(mongoHost + ":" + mongoPort); 
    } 
    @Override 
    protected String getDatabaseName() { 
     // TODO Auto-generated method stub 
     return mongoDB; 
    } 
} 
+0

Gdzie jest podana nazwa użytkownika i hasło? Daje nieautoryzowane wyłączenie, kiedy po prostu definiujemy je w pliku applicaiton.properties, a następnie rozszerzamy usługę AbstractMongoConfiguration. –

+0

Będzie to wewnątrz application.properties. –

+0

Czy to dobrze, używając zmiennej profilu, aby to zrobić? 'if (profileActive ==" dev ") {\t zwraca nowe Fongo (getDatabaseName()). getMongo();} else {return new MongoClient (url, port); } ' – anat0lius

10

spring.data.mongodb.host i spring.data.mongodb.port nie są obsługiwane, jeśli używasz Mongo 3.0 sterownik Java. W takich przypadkach należy stosować spring.data.mongodb.uri dostarczenie wszystkich konfiguracji, na przykład:

spring.data.mongodb.uri=mongodb://user:[email protected]:12345 
+7

Co zrobić, jeśli nie masz użytkownika lub hasła? – Jesse

Powiązane problemy