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

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

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

我该如何定义它?

【问题讨论】:

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

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


【解决方案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!
    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多