首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在spring data mongoDB中指定数据库名称

如何在spring data mongoDB中指定数据库名称
EN

Stack Overflow用户
提问于 2014-09-10 01:44:38
回答 3查看 26.5K关注 0票数 23

我正在使用Mongo存储库执行CRUD操作,如下面的代码所示。虽然这段代码可以工作,但是文档和集合是在不同的DB中创建的,而不是我想要的那个。如何显式指定将存储文档的DB名称。

POJO类:

代码语言:javascript
复制
@Document(collection = "actors")
public class Actor 
{
  @Id
  private String id;
  ...
  //constructor
  //setters & getters
}

存储库:

代码语言:javascript
复制
public interface ActorRepository extends MongoRepository<Actor, String> 
{
  public Actor findByFNameAndLName(String fName, String lName);
  public Actor findByFName (String fName);
  public Actor findByLName(String lName);
}

使用存储库的服务:

代码语言:javascript
复制
@Service
public class ActorService 
{
  @Autowired
  private ActorRepository actorRepository;

  public Actor insert(Actor a)
  {
    a.setId(null);
    return actorRepository.save(a);
  }
} 

我从REST控制器类访问服务:

代码语言:javascript
复制
@RestController
public class Controllers 
{

  private static final Logger logger = Logger.getLogger(Controllers.class);
  private static final ApplicationContext ctx = new  AnnotationConfigApplicationContext(SpringMongoConfig.class);

  @Autowire
  private ActorService actorService;

  @RequestMapping(value="/createActor", method=RequestMethod.POST)
  public @ResponseBody String createActor(@RequestParam(value = "fName") String fName,
        @RequestParam(value = "lName") String lName,
        @RequestParam(value = "role") String role)
  {
    return actorService.insert(new Actor(null,fName,lName,role)).toString();

  }

 ...
}

我已经创建了这个spring mongoDB配置类,它具有设置DB名称的选项,但不知道如何将其与上面的存储库一起使用。

代码语言:javascript
复制
@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration
{ 
    @Bean
    public GridFsTemplate gridFsTemplate() throws Exception 
    {
        return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
    }

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

    @Override
    @Bean
    public Mongo mongo() throws Exception 
    {
        return new MongoClient("localhost" , 27017 );
    }

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

回答 3

Stack Overflow用户

发布于 2016-10-07 06:13:45

在application.properties中添加一行

代码语言:javascript
复制
spring.data.mongodb.database=your_db_name

这对我来说很有效,也许对你来说太晚了,但这可以帮助那些正在寻找同样问题的人。查看更多属性here

票数 34
EN

Stack Overflow用户

发布于 2015-10-18 11:18:31

FWIW,我能够使用Sezin Karli和Sam上面的代码的组合来更改mongo数据库名称,尽管解决方案在Sam的情况下不起作用。

我的POM文件只包含对mongodb的引用:

代码语言:javascript
复制
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
    </dependency>

具体地说,首先我在资源中创建了一个包含以下信息的beans.xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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>

接下来,我更改了我的main,通过以下方式加载配置:

代码语言:javascript
复制
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

注意:这必须首先在main()中执行。

最后,我将extends AbstractMongoConfiguration添加到我的启动类中,并实现了

代码语言:javascript
复制
    @Override
    public String getDatabaseName() {
        return "myDBName";
    }

    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient("localhost" , 27017 );
    }

在两个位置指定了数据库名称。不幸的是,这似乎是成功所必需的。

票数 2
EN

Stack Overflow用户

发布于 2014-09-10 02:14:37

你的配置看起来不错,山姆。你确定有一个叫"MyDB“的数据库吗?或者您确定您不会在其他地方(如app context xml)中也设置如下所示的db名称。

代码语言:javascript
复制
 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
     <constructor-arg name="mongo" ref="mongo"/>
     <constructor-arg name="databaseName" value="demo"/>
   </bean>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25750815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档