繁体   English   中英

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

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

我在我的 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);        
    }

    [...]
    
}

数据库 uri 是:

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

连接很好,但不是连接到“myApp”数据库,而是连接到“test”数据库(默认)。 如果我使用 spring 属性:

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

它运行良好,但我不想使用它,因为我可以在同一台服务器上使用不同的应用程序读取相同的配置文件。

任何建议表示赞赏,谢谢。

这对我有用:覆盖数据库名称

@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