2014-05-07 48 views
47

Spring Boot的新手我想知道如何配置MongoDB的連接細節。 我試過了一些正常的例子,但是沒有一個覆蓋連接細節。Spring Boot以及如何配置連接細節到MongoDB?

我想指定要使用的數據庫以及運行MongoDB的主機的URL /端口。

任何提示或提示?

回答

55

只是引述Boot Docs

您可以設置spring.data.mongodb.uri屬性來更改URL,或者指定一個host/port。例如,你可能會聲明在application.properties如下:

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

spring.data.mongodb前綴所有可用的選項是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

嘿,我會做同樣的使用Spring啓動正常的web應用程序?我在哪裏可以找到application.properties文件? – Theo

+0

如果您不想依賴默認選項,您需要自己編寫它:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config。 html –

+0

請注意,如果您想將密碼字段設置爲char [],那麼目前存在問題。而是使用uri字段。看到這個錯誤報告的底部:https://github.com/spring-projects/spring-boot/issues/536 – grahamrb

11

在Maven項目創建一個文件src/main/resources/application.yml具有以下內容:

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會自動使用這個文件來配置你的應用程序。然後,你就可以開始你的春季啓動應用程序或者與集成模式(和使用本地的MongoDB)

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

或與生產概況(和使用您的產品的MongoDB)

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

可以定義更多通過擴展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

指定的用戶名和密碼在哪裏?當我們只是在applicaiton.properties中定義它,然後擴展AbstractMongoConfiguration時,它會提供未授權的關注。 –

+0

它會在application.properties –

+0

裏面使用profile變量來做到這一點嗎? 'if(profileActive ==「dev」){\t return new Fongo(getDatabaseName())。getMongo();} else {return new MongoClient(url,port); }' – anat0lius

10

spring.data.mongodb.hostspring.data.mongodb.port如果您使用的是蒙戈3.0 Java驅動程序不被支持。在這種情況下,spring.data.mongodb.uri應該用來提供所有的配置,這樣的:

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

如果您沒有用戶名或密碼,該怎麼辦? – Jesse