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

Posted

技术标签:

【中文标题】如何在 Spring-data 中更改/定义 Mongodb 的默认数据库?【英文标题】:How can I change/define default database of Mongodb in Spring-data? 【发布时间】:2016-09-10 14:43:14 【问题描述】:

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

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

我该如何定义它?

【问题讨论】:

类的数据库名称是什么意思?你的意思是说Document 类名(表名)? @SanjayRawat 可以说在我的 mongod 中我有多个数据库。我想使用第一个。 【参考方案1】:

您只需要在 application.properties 文件中定义相应的 mongobd 属性,或者如果您想使用 yml 语法,则在 application.yml 中定义 props。在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: ******

【讨论】:

谢谢。我们可以使用多个数据库吗? 我想是的。为 JPA 找到了这个 smasue.github.io/spring-yml-datasources,可以通过手动配置应用于 Mongo。 @Furkan 你有没有找到一种方法来使用默认配置的多个连接?【参考方案2】:

如果您使用的是 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 Boot 应用程序

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

【讨论】:

【参考方案3】:

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <mongo:mongo-client credentials="user:password@database" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongo" ref="mongo"/>
        <constructor-arg name="databaseName" value="myDBName"/>
    </bean>
</beans>

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

@Configuration
public class SpringDBConfig extends AbstractMongoConfiguration
 

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

【讨论】:

Spring Boot 中没有 XML。 问题有spring-boot标签,所以不建议配置XML!

以上是关于如何在 Spring-data 中更改/定义 Mongodb 的默认数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spring-data 中使用子图(使用休眠)?

如何在你的库中使用 Spring-Data 以及如何在你的项目中使用这个库?

MongoDB使用记录

如何在 spring-data 2.0.x 中创建 RedisCacheManager

即使 JPA 实体不脏,我是不是可以强制 spring-data 更新可审计字段?

004-spring-data-elasticsearch 3.0.0.0使用-spring-data之定义方法创建repository实例从聚合根发布事件