application.yml을 통해서 spring.data.mongodb.uri 값을 지정하여 입력하였는데,
이를 인식하지 못하는 것인지 starter에서 host와 port를 내놓으라고 한다.
yml 내용
spring:
data:
mongodb:
uri: mongodb://192.168.0.12:27017,mongodb://192.168.0.13:27017
database: test-replica
repositories:
type: auto
아래 내용을 보면서 했는데 이해를 못하겠다.
원래는 xml로 세팅해서 사용하는게 있었는데 편해질줄 알고 starter를 쓰고 있는데 오히려 힘들어졌다.
기존에 정의되었던 xml을 java config로 바꾸는것도 여간 귀찮은게 아니다..
<mongo:mongo-client replica-set="${mongo.replicaset}">
<mongo:client-options
connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000"
max-wait-time="1500"
socket-keep-alive="false"
socket-timeout=“1500"
/>
</mongo:mongo-client>
<mongo:mapping-converter id="mongoConverter" type-mapper-ref="defaultMongoTypeMapper" />
<mongo:db-factory dbname="${mongo.database}" mongo-ref="mongo"/>
<mongo:repositories base-package="com.test.**.repository" />
<bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey"><null/></constructor-arg>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mongoConverter" />
</bean>
위와 같은 내용을 java config로 바꿔보자.
뭔가 코드만 계속 보게 되어서 xml로 설정할 때보다 기분상 좋은 것 같기도하고, 여차해서 나중에 bean 자체에 대한 자유도도 높아지니
인내하고 하나씩 바꿔 나가보고 있다.
하나씩 해보자 mongo:mongo-client와 내부의 mongo:client-options 부터
참고한 내용을 보면 AbstractMongoConfiguration을 상속받아 구현한 클래스는 mongoTemplate을 만들 필요가 없다.
이 방식으로 하기로 하고 작성한다.
package com.test.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
@Configuration
@EnableMongoRepositories({“com.test.**.repository"})
public class MongoDBConfig extends AbstractMongoConfiguration {
@Value("${mongodb.uri}")
private String uri;
@Value("${mongodb.database}")
private String databaseName;
@Override
public MongoClient mongoClient() {
MongoClient client = new MongoClient(new MongoClientURI(this.uri, MongoClientOptions.builder()
.connectionsPerHost(8)
.threadsAllowedToBlockForConnectionMultiplier(4)
.connectTimeout(1000)
.maxWaitTime(1500)
.socketTimeout(1500)
.socketKeepAlive(false)));
return client;
}
@Override
protected String getDatabaseName() {
return this.databaseName;
}
}
위에 기술한 형태와 동일한 기능을 한다.
차이가 약간 있는데 uri, replica set의 정보에 mongodb://를 추가해서 앞에 붙여야한다고 나온다.
프로토콜을 붙이는 것 말고 설정정보는 변경없이 그대로 동작한다.
참고 : http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/connection-settings/
'프로그래밍' 카테고리의 다른 글
TortoiseSVN를 이용한 프로젝트 업로드(eclipse의 share) (0) | 2019.08.28 |
---|---|
IIS 서버 호출시 기본 디렉터리 탐색현상 처리 (0) | 2019.07.23 |
Spring boot starter data MongoDB interface repository 를 인식하지 못할 때 (0) | 2019.02.19 |
[maven] maven-resources-plugin을 이용한 properties.xml 별도 배포 (0) | 2018.07.13 |
maven clean install 후 runnable jar 배포설정 (0) | 2018.07.13 |