Spring BootとMongoDBへの接続の詳細を構成する方法は?


89

Spring Bootを初めて使用するので、MongoDBの接続の詳細をどのように構成できるのか疑問に思っています。通常の例を試しましたが、接続の詳細については説明していません。

使用するデータベースと、MongoDBを実行するホストのURL /ポートを指定したいと思います。

ヒントやヒントはありますか?

回答:


105

ブートドキュメントを引用するだけです:

spring.data.mongodb.uriプロパティを設定してURLを変更するか、またはを指定することができますhost/port。たとえば、次のように宣言できますapplication.properties

spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017

spring.data.mongodbプレフィックスに使用できるすべてのオプションは、次のフィールドですMongoProperties

private String host;

private int port = DBPort.PORT;

private String uri = "mongodb://localhost/test";

private String database;

private String gridFsDatabase;

private String username;

private char[] password;

ねえ、Springブートを使用する通常のWebアプリでも同じことをしますか?application.propertiesファイルはどこにありますか?
テオ

デフォルトのオプションに依存したくない場合は、自分で作成する必要があります:docs.spring.io/spring-boot/docs/current/reference/html/…–
Artem Bilan

パスワードフィールドをchar []として設定する場合、現在問題があることに注意してください。代わりに、uriフィールドを使用してください。このバグレポートの下部を参照してください:github.com/spring-projects/spring-boot/issues/536
grahamrb

こんにちは、私はSpringBootを初めて使用します。これらの構成はどこに設定しますか?引数として渡すか、どこかに設定しますか?
Siddharth 2016

この件についてはリファレンスマニュアルをお読みください:docs.spring.io/spring-boot/docs/current/reference/html/…–
Artem Bilan

31

spring.data.mongodb.hostそしてspring.data.mongodb.port、あなたが使用している場合、サポートされていませんMongoの3.0 Javaドライバを。このような場合はspring.data.mongodb.uri、次のようにすべての構成を提供するために使用する必要があります。

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345

12
ユーザーまたはパスワードがない場合はどうなりますか?
ジェシー

その場合、@ Jesseは問題ありません。デフォルトでは、mongoは認証を必要としないため、その場合は接続が機能します。
jmojico

spring.data.mongodb.uriで自動再接続を提供するオプションはありますか?
P SatishPatro19年

スタンドアロンのSpringデータアプリケーションで機能しますか?
SumanthVarada19年

20

Mavenプロジェクトsrc/main/resources/application.ymlで、次の内容のファイルを作成します。

spring.profiles: integration
# use local or embedded mongodb at localhost:27017
---
spring.profiles: production
spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>

Spring Bootは、このファイルを自動的に使用してアプリケーションを構成します。次に、統合プロファイルを使用してSpring Bootアプリケーションを起動できます(ローカルのMongoDBを使用します)

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

または本番プロファイルを使用して(そして本番MongoDBを使用して)

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

spring.data.mongodb.uriで自動再接続を提供するオプションはありますか?
P SatishPatro19年

16

AbstractMongoConfigurationを拡張することで、詳細を定義できます。

@Configuration
@EnableMongoRepositories("demo.mongo.model")
public class SpringMongoConfig extends AbstractMongoConfiguration {
    @Value("${spring.profiles.active}")
    private String profileActive;

    @Value("${spring.application.name}")
    private String proAppName;

    @Value("${spring.data.mongodb.host}")
    private String mongoHost;

    @Value("${spring.data.mongodb.port}")
    private String mongoPort;

    @Value("${spring.data.mongodb.database}")
    private String 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(mongoHost + ":" + mongoPort);
    }
    @Override
    protected String getDatabaseName() {
        // TODO Auto-generated method stub
        return mongoDB;
    }
}

ユーザー名とパスワードはどこに指定されていますか?applicaiton.propertiesで定義してから、AbstractMongoConfigurationを拡張すると、不正なキャプションが発生します。
Noor Syed

これはapplication.properties内にあります
室谷真理2017年

これを行うためにプロファイル変数を使用するのは正しいですか?if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
anat0lius 2017年

13

MongoDBには「認証データベース」の概念があることに注意することも重要です。これは、接続しているデータベースとは異なる場合があります。たとえば、Mongoの公式Dockerイメージを使用し、環境変数MONGO_INITDB_ROOT_USERNAMEとを指定した場合 MONGO_INITDB_ROOT_PASSWORD、ユーザーは「admin」データベースに作成されます。これは、おそらく使用するデータベースではありません。この場合、以下を使用して、application.propertiesファイルでそれに応じてパラメーターを指定する必要があります。

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=<username specified on MONGO_INITDB_ROOT_USERNAME>
spring.data.mongodb.password=<password specified on MONGO_INITDB_ROOT_PASSWORD>
spring.data.mongodb.database=<the db you want to use>

1
そうではありませんMONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD、の場合ですpassword
カミルヴィトコフスキー

0

これが、Spring Boot 2.0でカスタムMongoClientを作成し、接続の制御を強化する方法です。

完全なソースコードについては、githubリンクをたどってください

@Configuration
@EnableMongoRepositories(basePackages = { "com.frugalis.repository" })
@ComponentScan(basePackages = { "com.frugalis.*" })
@PropertySource("classpath:application.properties")
public class MongoJPAConfig extends AbstractMongoConfiguration {

    @Value("${com.frugalis.mongo.database}")
    private String database;
    @Value("${com.frugalis.mongo.server}")
    private String host;
    @Value("${com.frugalis.mongo.port}")
    private String port;
    @Value("${com.frugalis.mongo.username}")
    private String username;
    @Value("${com.frugalis.mongo.password}")
    private String password;


    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Override
    protected String getMappingBasePackage() {
        return "com.frugalis.entity.mongo";
    }

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

    @Override
    @Bean
    public MongoClient mongoClient() {

        List<MongoCredential> allCred = new ArrayList<MongoCredential>();
        System.out.println("???????????????????"+username+" "+database+" "+password+" "+host+" "+port);
        allCred.add(MongoCredential.createCredential(username, database, password.toCharArray()));
        MongoClient client = new MongoClient((new ServerAddress(host, Integer.parseInt(port))), allCred);
        client.setWriteConcern(WriteConcern.ACKNOWLEDGED);

        return client;
    }} 

方法は?何-クラスを追加しますか?JPAとは何ですか?このファイルのどこにインポートしますか?これはせいぜい不完全な答えです。
barrypicker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.