web-dev-qa-db-ja.com

春のデータmongoDBでデータベース名を指定する方法

以下のコードのように、Mongoリポジトリを使用してCRUD操作を実行しています。このコードは機能しますが、ドキュメントとコレクションは、必要なDBとは異なるDBで作成されます。ドキュメントを保存するDB名を明示的に指定するにはどうすればよいですか。

POJOクラス:

@Document(collection = "actors")
public class Actor 
{
  @Id
  private String id;
  ...
  //constructor
  //setters & getters
}

リポジトリ:

public interface ActorRepository extends MongoRepository<Actor, String> 
{
  public Actor findByFNameAndLName(String fName, String lName);
  public Actor findByFName (String fName);
  public Actor findByLName(String lName);
}

リポジトリを使用するサービス:

@Service
public class ActorService 
{
  @Autowired
  private ActorRepository actorRepository;

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

そして、RESTコントローラクラスからサービスにアクセスします。

@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();

  }

 ...
}

私はこの春のmongoDB構成クラスを作成しましたが、これにはDB名を設定するオプションがありますが、上記のリポジトリーでそれを使用する方法を理解できませんでした。

@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());
    }    
}
18
Sami

Application.propertiesに行を追加します

spring.data.mongodb.database=your_db_name

それは私にはうまくいきました、多分あなたには遅すぎますが、これは同じ問題を探している誰かを助けることができました。その他のプロパティを参照 ここ

25
drWatson

Spring-Bootの場合:

自動構成に依存してから、application.propertiesファイルに入力することができます。

spring.data.mongodb.database=your_db_name

または、Spring-bootの自動構成に依存したくない場合は、次のように簡単にできます。

import com.mongodb.MongoClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

/**
 * MonfoConfig
 */
@Configuration
public class MongoConfig {

    @Bean
    public MongoDbFactory mongoDbFactory() {

        MongoClient mongoClient = new MongoClient("127.0.0.1:27017");

        return new SimpleMongoDbFactory(mongoClient, "databasenamehere" );
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoDbFactory());
    }
}

あなたがその道を進みたいなら、私はSpring Bootの状態評価レポート( https://www.baeldung.com/spring-boot-auto-configuration-report )を調べて微調整することをお勧めしますあなたが微調整する必要があるもの。お役に立てれば。

3
Witold Kaczurba

FWIW、Samの状況では解決策が機能しないにもかかわらず、上記のSezin KarliとSamのコードの組み合わせを使用して、mongoデータベース名を変更できます。

私のPOMファイルには、mongodbへのこの参照のみが含まれています。

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
    </dependency>

具体的には、まず、リソースに次の情報を含むbeans.xmlファイルを作成しました。

<?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>

次に、メインを変更して設定をロードします:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

注:これはmain()で最初に実行する必要があります。

最後に、extends AbstractMongoConfiguration開始クラスに実装されました

    @Override
    public String getDatabaseName() {
        return "myDBName";
    }

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

データベース名は2つの場所で指定されました。残念ながら、これは成功に必要なようです。

2
user216661

あなたの設定はサムのようです。 「MyDB」というデータベースがあることを確認しますか?または、以下のように他の場所(アプリコンテキストxmlなど)でもデータベース名を設定しないようにしていますか?.

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