Home > Net >  Spring boot and MongoDB: always connect to database "test"
Spring boot and MongoDB: always connect to database "test"

Time:06-09

I'm configuring mongoDB in my spring boot application like this:

@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:

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). If I use the spring property:

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.

CodePudding user response:

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

}
  • Related