带有私有构造函数的 MongoDB 配置类

时间:2021-06-22 15:56:17

标签: java mongodb spring-boot

我尝试为我的 SpringBoot 应用程序准备 mongoDB 配置。 DB 将在 2 个微服务之间共享。我想在我的代码中使用私有构造函数来防止实例化 MongoConfig 类。目的是只有一个 MongoClient 实例。 但是当我运行我的应用程序时,我看到一个异常,如:“java.lang.IllegalArgumentException:类中没有可见的构造函数......”。我应该如何更改我的代码才能在配置类中使用私有构造函数?可能吗?

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

private static volatile MongoConfig instance;

public static MongoConfig getInstance() {
    if(instance == null) {
        synchronized (MongoConfig.class) {
            if(instance == null) {
                instance = new MongoConfig();
            }
        }
    }
    return instance;
}

private MongoClient mongoClient;
private MongoDatabase mongoDatabase;

private MongoConfig() {
    mongoClient = mongoClient();
    mongoDatabase = mongoClient.getDatabase("myDB");
}

@Bean
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
}

@Override
public String getDatabaseName() {
    return "myDB";
}

@Override
public MongoClient mongoClient() {
    //TODO: probably we should hide somewhere credentials or use environment variable
    final ConnectionString connectionString = new ConnectionString("hidden_string_connection");
    final MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
            .applyConnectionString(connectionString)
            .build();
    return MongoClients.create(mongoClientSettings);
}

public MongoDatabase getMongoDatabase() {
    return mongoDatabase;
}

}

0 个答案:

没有答案
相关问题