개요 :
Mongo DB의 DataBase가 늘어나면서
Spring Boot의 application.yml에 default config 세팅으로는 여러 DataBase를 연결 할 수 없었다.
다중 Config 설정을 위해 CustomConfig의 생성이 필요하다.
-- 변경 전 예시 (applicationl.yml)
- 1개의 애플리케이션당 1개의 connection만 연결 가능했었다.
spring:
data:
mongodb:
host: demo_host
port: 27017
authentication-database: demo_auth
username: demo_username
password: demo_password
database: demo_database
-- 1. 변경 후 (Java 8 버전 레거시 시스템 - Spring Framework 4.3.0.RELEASE)
- Lib Version :
- spring-data-mongodb - 1.10.23.RELEASE
- bson - 3.12.14
- mongodb-driver-core - 3.12.14
- mongodb-driver-sync - 3.12.14
- mongo-java-driver - 3.12.14
- 라이브러리 버전을 custom 하게 잡은 이유는 여러 버전으로 테스트 했지만
Spring 4버전, Java 8버전에 맞는 최적의 라이브러리 버전이라 적용하였다.
@Configuration
public class MongoAdminDBConfig {
@Value("#{prop['service.mongodb.host']}")
private String host;
@Value("#{prop['service.mongodb.port']}")
private String port;
@Value("#{prop['service.mongodb.username']}")
private String username;
@Value("#{prop['service.mongodb.password']}")
private String password;
@Value("#{prop['service.mongodb.database.everon-admin']}")
private String database;
@Value("#{prop['service.mongodb.authentication-database']}")
private String authenticationDatabase;
@Bean(name = "mongoAdminClient")
public MongoClient mongoClient(@Qualifier("mongoAdminMongoClientURI") MongoClientURI mongoClientURI) {
return new MongoClient(mongoClientURI);
}
@Bean(name = "mongoAdminDbFactory")
public MongoDbFactory mongoDbFactory(@Qualifier("mongoAdminClient") MongoClient mongoClient) {
return new SimpleMongoDbFactory(mongoClient, this.database);
}
@Bean(name = "mongoEveronAdminTemplate")
public MongoTemplate mongoTemplate(@Qualifier("mongoAdminDbFactory") MongoDbFactory mongoDbFactory
, @Qualifier("mongoAdminConverter") MongoConverter mongoConverter) {
return new MongoTemplate(mongoDbFactory, mongoConverter);
}
@Bean(name = "mongoAdminMappingContext")
public MongoMappingContext mongoMappingContext() {
return new MongoMappingContext();
}
@Bean(name = "mongoAdminConverter")
public MongoConverter mongoConverter(@Qualifier("mongoAdminDbFactory") MongoDbFactory mongoDbFactory,
@Qualifier("mongoAdminMappingContext") MongoMappingContext mongoMappingContext) {
DbRefResolver resolver = new DefaultDbRefResolver(mongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(resolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
@Bean(name = "mongoAdminMongoClientURI")
public MongoClientURI mongoClientURI() {
String uri = "mongodb://"+this.username+":"+this.password+"@"+this.host+":"
+Integer.valueOf(this.port)+"/?authSource="+this.authenticationDatabase;
return new MongoClientURI(uri);
}
}
-- 2. 변경 후 (Java 17 버전 신규 시스템 - Spring Boot)
- Lib Version : spring-boot-starter-data-mongodb - 2.7.2
@Configuration
public class MongoErrlogDBConfig {
@Value("${service.mongodb.host}")
private String host;
@Value("${service.mongodb.port}")
private String port;
@Value("${service.mongodb.username}")
private String username;
@Value("${service.mongodb.password}")
private String password;
@Value("${service.mongodb.database.errlog}")
private String database;
@Value("${service.mongodb.authentication-database}")
private String authenticationDatabase;
@Bean(name = "mongoErrlogClient")
public MongoClient mongoClient(@Qualifier("mongoErrlogClientSettings") MongoClientSettings mongoClientSettings) {
return MongoClients.create(mongoClientSettings);
}
@Bean(name = "err_log")
public MongoTemplate mongoTemplate(@Qualifier("mongoErrlogDbFactory") MongoDatabaseFactory mongoDbFactory
, @Qualifier("mongoErrlogConverter") MongoConverter mongoConverter) {
return new MongoTemplate(mongoDbFactory, mongoConverter);
}
@Bean(name = "mongoErrlogDbFactory")
public MongoDatabaseFactory mongoDbFactory(@Qualifier("mongoErrlogClient") MongoClient mongoClient) {
return new SimpleMongoClientDatabaseFactory(mongoClient, this.database);
}
@Bean(name = "mongoErrlogMappingContext")
public MongoMappingContext mongoMappingContext() {
return new MongoMappingContext();
}
@Bean(name = "mongoErrlogConverter")
public MongoConverter mongoConverter(@Qualifier("mongoErrlogDbFactory") MongoDatabaseFactory mongoDbFactory
, @Qualifier("mongoErrlogMappingContext") MongoMappingContext mongoMappingContext) {
DbRefResolver resolver = new DefaultDbRefResolver(mongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(resolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
@Bean(name = "mongoErrlogConnectionString")
public ConnectionString connectionString() {
return new ConnectionString("mongodb://"+this.username+":"+this.password+"@"+this.host+":"
+Integer.valueOf(this.port)+"/?authSource="+this.authenticationDatabase);
}
@Bean(name = "mongoErrlogCredential")
public MongoCredential mongoCredential() {
return MongoCredential.createCredential(this.username, this.database, this.password.toCharArray());
}
@Bean(name = "mongoErrlogClientSettings")
public MongoClientSettings mongoClientSettings(@Qualifier("mongoErrlogConnectionString") ConnectionString connectionString
, @Qualifier("mongoErrlogCredential") MongoCredential mongoCredential) {
return MongoClientSettings.builder()
.applyConnectionString(connectionString)
.credential(mongoCredential)
.build();
}
}
'SPRING' 카테고리의 다른 글
jdk 8 -> 17 및 spring 5.3.24 -> 6.0.2 업그레이드 이슈 (0) | 2022.12.16 |
---|---|
spring boot Gradle 버전 이슈 (0) | 2022.12.13 |
mybatis-config 설정 오류 (0) | 2022.12.11 |
sqlSessionFactory location 못찾는 이슈 (0) | 2022.12.11 |
Spring - @Transactional (0) | 2022.10.11 |