web-dev-qa-db-ja.com

Spring BootとMongoDBへの接続詳細の設定方法は?

Spring Bootを初めて使用する場合、MongoDBの接続の詳細をどのように構成できるか疑問に思っています。私は通常の例を試しましたが、接続の詳細をカバーするものはありません。

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

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

68
Marco

引用するだけ Boot Docs

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;
84
Artem Bilan

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

spring.data.mongodb.uri=mongodb://user:[email protected]:12345
15
Ali Dehghani

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;
    }
}
14
Mari Murotani

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>@<url>:<port>/<dbname>

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

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

または実稼働プロファイルを使用して(および実稼働MongoDBを使用します)

Java -jar -Dspring.profiles.active=production your-app.jar
14
asmaier

MongoDBには「authentication database」という概念があることに注意することも重要です。これは接続しているデータベースとは異なる場合があります。たとえば、 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_USERNAME>
spring.data.mongodb.database=<the db you want to use>
2
Danilo Teodoro

ここでは、Spring Boot 2.0で行うことができます

フルソースコードの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;
    }} 
0
Sanjay-Dev