我尝试为我的 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;
}
}