简体   繁体   English

Spring 引导和 MongoDB:始终连接到数据库“测试”

[英]Spring boot and MongoDB: always connect to database "test"

I'm configuring mongoDB in my spring boot application like this:我在我的 spring 引导应用程序中配置 mongoDB,如下所示:

@Configuration
@SpringBootApplication
public class ConfigDbApp extends SpringBootServletInitializer {

    @Value("${myapp.mongodb.uri}")
    private String mongoDbUri;

    [...]

    @Bean
    public MongoClient mongoClient() {
        MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
            .applyConnectionString(new ConnectionString(mongoDbUri.trim()))
            .build();
        return MongoClients.create(mongoClientSettings);        
    }

    [...]
    
}

The database uri is:数据库 uri 是:

myapp.mongodb.uri=mongodb://localhost:27017/myApp?sslInvalidHostNameAllowed=true&streamType=netty&ssl=false

The connection is fine but instead of connecting to "myApp" database it connect to "test" database (the default).连接很好,但不是连接到“myApp”数据库,而是连接到“test”数据库(默认)。 If I use the spring property:如果我使用 spring 属性:

spring.data.mongodb.uri=mongodb://localhost:27017/myApp?sslInvalidHostNameAllowed=true&streamType=netty&ssl=false

it works well, but I don't want to use it because I can have diferent apps in the same server reading the same configuration file.它运行良好,但我不想使用它,因为我可以在同一台服务器上使用不同的应用程序读取相同的配置文件。

Any suggestion is appreciated, thanks.任何建议表示赞赏,谢谢。

This worked with me: override the database name这对我有用:覆盖数据库名称

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Value("${spring.data.mongodb.uri}")
    private String uri;
    @Value("${spring.data.mongodb.database}")
    private String database;

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

    @Bean
    @Override
    public MongoClient mongoClient() {
        final ConnectionString connectionString = new ConnectionString(uri);
        final MongoClientSettings.Builder mongoClientSettings = MongoClientSettings.builder().applyConnectionString(connectionString)
                .applyToConnectionPoolSettings(builder -> builder.applySettings(connectionPoolSettings()));
        return MongoClients.create(mongoClientSettings.build());
    }



    private ConnectionPoolSettings connectionPoolSettings() {
        return ConnectionPoolSettings.builder()
                .maxSize(50)
                .maxWaitTime(20, TimeUnit.SECONDS)
                .maxConnectionIdleTime(20, TimeUnit.SECONDS)
                .maxConnectionLifeTime(60, TimeUnit.SECONDS).build();
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM