如何在Spring-data中更改/定义Mongodb的默认数据库?

时间:2016-05-14 11:52:02

标签: spring mongodb spring-boot spring-data nosql

我有从MongoRepository扩展的接口。他们正在使用mongodb的默认数据库。我想为类定义数据库名称。

public interface CustomerRepository extends MongoRepository<Customer, String> {
    ...
}

我该如何定义它?

3 个答案:

答案 0 :(得分:7)

您只需在application.properties文件中定义相应的mongobd属性,或者如果您想要yml语法,则在application.yml中定义道具。在src/main/resources下,application.properties应该已经存在。

application.properties

spring.data.mongodb.host=<hostname> 
spring.data.mongodb.port=27017 
spring.data.mongodb.database=<dbname>
spring.data.mongodb.username=<usernamr>
spring.data.mongodb.password=******

application.yml

spring: 
    data: 
        mongodb: 
            host: <hostname> 
            port: 27017 
            database: <dbname>
            username: <usernamr>
            password: ******

答案 1 :(得分:3)

如果您使用的是Spring Boot,以下步骤可能会对您有所帮助。

  • 在application.properties或yml描述符中定义以下属性。请注意,属性应该以spring.data.mongodb开头。如果您使用的是Mongo 3.x java驱动程序,则应使用spring.data.mongodb.uri来提供uri配置。

    spring.profiles: myprofile
    spring.data.mongodb.uri: mongodb://user:passwd@url:port/dbname 
    spring.data.mongodb.database:myDB

  • 编写SpringMongoConfiguration。

    @Configuration
    @EnableMongoRepostories("path.to.your.repository")
    public class SpringMongoConfiguration extends AbstractMongoConfiguration {
    
    @Value("${spring.data.mongodb.uri}")
    private String mongoDB;
    
    @Value("${spring.data.mongodb.uri}")
    private String mongoURI;
    
    @Override
    protected String getDatabaseName() {
        // TODO Auto-generated method stub
        return 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(new MongoClientURI(myURI));
    }
     }
    
  • 构建项目并运行Spring启动应用程序

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

答案 2 :(得分:-1)

如果您使用上下文XML,请在XML中添加以下内容并定义数据库配置。

@Configuration
public class SpringDBConfig extends AbstractMongoConfiguration
{ 

    @Override
    protected String getDatabaseName() {
        return "testdatabase";
    }
    ......         
}

或者,通过扩展AbstractMongoConfiguration定义一个类并覆盖getDatabaseName()。

input