Spring Boot以及如何配置与MongoDB的连接详细信息?


89

作为Spring Boot的新手,我想知道如何为MongoDB配置连接详细信息。我已经尝试了正常示例,但没有一个涵盖连接详细信息。

我想指定将要使用的数据库以及运行MongoDB的主机的url /端口。

有任何提示或提示吗?

Answers:


105

仅引用Boot Docs

您可以设置spring.data.mongodb.uri属性来更改网址,也可以指定一个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;

嘿,对于使用Spring Boot的普通Web应用程序,我会做同样的事情吗?在哪里可以找到application.properties文件?
Theo 2014年

如果您不想依赖默认选项,则需要自己编写:docs.spring.io/spring-boot/docs/current/reference/html/…–
Artem Bilan

请注意,如果要设置密码字段为char [],则当前存在问题。而是使用uri字段。请参阅此错误报告的底部:github.com/spring-projects/spring-boot/issues/536
grahamrb 2014年

嗨,我是Spring Boot的新手。我们在哪里设置这些配置?只是将其作为参数传递或将其设置在某处?
Siddharth


31

spring.data.mongodb.hostspring.data.mongodb.port如果使用的是Mongo 3.0 Java驱动程序,则不受支持。在这种情况下,spring.data.mongodb.uri应使用它来提供所有配置,如下所示:

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345

12
如果您没有用户名或密码怎么办?
杰西(Jesse)

在这种情况下,@ Jesse很好,默认情况下mongo不需要任何身份验证,因此在这种情况下连接可以工作。
jmojico

在spring.data.mongodb.uri中是否可以进行自动重新连接?
P Satish Patro

它可以用于独立的spring数据应用程序吗?
Sumanth Varada

20

在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>@<host>:<port>/<dbname>

Spring Boot将自动使用此文件来配置您的应用程序。然后,您可以使用集成配置文件启动Spring Boot应用程序(并使用本地MongoDB)

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

或使用生产资料(并使用您的生产MongoDB)

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

在spring.data.mongodb.uri中是否可以进行自动重新连接?
P Satish Patro

16

您可以通过扩展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;
    }
}

用户名和密码在哪里指定?当我们只是在applicaiton.properties中定义它,然后扩展AbstractMongoConfiguration时,它会提供未经授权的解释。
Noor Syed

它将在application.properties中
Mari Murotani

使用配置文件变量执行此操作是否正确?if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
anat0lius17年

12

还需要注意的是,MongoDB具有“身份验证数据库”的概念,该概念可能与您要连接的数据库不同。例如,如果您对Mongo使用正式的Docker映像并指定环境变量 MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,则会在' admin '数据库上创建一个用户,该数据库可能不是您要使用的数据库。在这种情况下,您应该使用以下命令在application.properties文件中相应地指定参数:

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=<username specified on MONGO_INITDB_ROOT_USERNAME>
spring.data.mongodb.password=<password specified on MONGO_INITDB_ROOT_PASSWORD>
spring.data.mongodb.database=<the db you want to use>

1
不是,MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD如果是password
卡米尔·维特科夫斯基

0

这是在Spring Boot 2.0中通过创建自定义MongoClient添加添加为Connection提供更多控制权,

请按照 github链接获取完整的源代码

@Configuration
@EnableMongoRepositories(basePackages = { "com.frugalis.repository" })
@ComponentScan(basePackages = { "com.frugalis.*" })
@PropertySource("classpath:application.properties")
public class MongoJPAConfig extends AbstractMongoConfiguration {

    @Value("${com.frugalis.mongo.database}")
    private String database;
    @Value("${com.frugalis.mongo.server}")
    private String host;
    @Value("${com.frugalis.mongo.port}")
    private String port;
    @Value("${com.frugalis.mongo.username}")
    private String username;
    @Value("${com.frugalis.mongo.password}")
    private String password;


    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Override
    protected String getMappingBasePackage() {
        return "com.frugalis.entity.mongo";
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoClient(), getDatabaseName());
    }

    @Override
    @Bean
    public MongoClient mongoClient() {

        List<MongoCredential> allCred = new ArrayList<MongoCredential>();
        System.out.println("???????????????????"+username+" "+database+" "+password+" "+host+" "+port);
        allCred.add(MongoCredential.createCredential(username, database, password.toCharArray()));
        MongoClient client = new MongoClient((new ServerAddress(host, Integer.parseInt(port))), allCred);
        client.setWriteConcern(WriteConcern.ACKNOWLEDGED);

        return client;
    }} 

就是这样?什么-增加课程?什么是JPA?您的导入文件在哪里?这充其量是一个不完整的答案。
barrypicker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.