Files
myListBridgeAPI/src/main/java/com/global/configuration/MongodbConfig.java
2025-11-28 15:34:48 +09:00

83 lines
3.7 KiB
Java

package com.global.configuration;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.repository.MongoRepository;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;
@Configuration
@EnableMongoRepositories(basePackageClasses = MongoRepository.class, basePackages = "com.mongodb.repository", mongoTemplateRef = "mongodbTemplate")
public class MongodbConfig {
@Value("${mongodb.host}")
String businessLogHost;
@Value("${mongodb.username}")
String username;
@Value("${mongodb.password}")
String password;
@Value("${mongodb.db}")
String db;
@Bean(name = "mongodbClient")
public MongoClient mongoStatClient() {
String encodePassword = URLEncoder.encode(password, StandardCharsets.UTF_8);
String auth = username.isEmpty() ? "" : String.format("%s:%s@",username, encodePassword);
String connection;
connection = String.format("mongodb://%s%s/%s?authSource=%s", auth, businessLogHost, db, db);
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(connection))
// 커넥션 풀 설정
.applyToConnectionPoolSettings(builder -> {
builder.maxSize(100) // 최대 연결 수
.minSize(10) // 최소 연결 수
.maxWaitTime(30, TimeUnit.SECONDS) // 연결 대기 시간
.maxConnectionLifeTime(0, TimeUnit.MILLISECONDS) // 연결 최대 수명 (0 = 무제한)
.maxConnectionIdleTime(0, TimeUnit.MILLISECONDS); // 연결 최대 유휴 시간 (0 = 무제한)
})
// 소켓 설정
.applyToSocketSettings(builder -> {
builder.connectTimeout(10, TimeUnit.SECONDS) // 연결 타임아웃
.readTimeout(0, TimeUnit.MILLISECONDS); // 읽기 타임아웃 (0 = 무제한)
})
// 서버 선택 설정
.applyToServerSettings(builder -> {
builder.heartbeatFrequency(10, TimeUnit.SECONDS) // 하트비트 주기
.minHeartbeatFrequency(500, TimeUnit.MILLISECONDS); // 최소 하트비트 주기
})
// 클러스터 설정
.applyToClusterSettings(builder -> {
builder.serverSelectionTimeout(30, TimeUnit.SECONDS) // 서버 선택 타임아웃
.localThreshold(15, TimeUnit.MILLISECONDS); // 로컬 임계값
})
.build();
return MongoClients.create(settings);
}
@Bean(name = "mongoFactory")
public MongoDatabaseFactory mongoFactory(@Qualifier("mongodbClient") MongoClient mongoClient) {
return new SimpleMongoClientDatabaseFactory(mongoClient, db);
}
@Bean(name = "mongodbTemplate")
public MongoTemplate mongodbTemplate(@Qualifier("mongoFactory") MongoDatabaseFactory mongoFactory) {
return new MongoTemplate(mongoFactory);
}
}