spring boot mongodb connection 및 자동 _class 컬럼 insert 삭제 설정
몽고디비를 연결해주려면 스프링부트에서는 yml 설정에서 추가만 해도 되지만,
object 클래스를 넣어줄떄 자동으로 _class 라는 필드가 추가되게 된다.
_class 를 없애주려면 @Configuraion 으로 mongodb 세팅을 자바 코드로 설정을 해주어야 한다.
해당 내용은 스프링부트 spring-boot-stater-data-mongodb:2.3.3 RELEASE 버젼,
spring-data-mongodb:3.0.3 RELEASE 이다.
차이점은
spring-data-mongodb 2 버젼은 MongoDatabaseFactory 가 아니라 MongoDbFactory 이다.
3 버젼에서는 MongoDbFactory 가 deprecated 가 되어서 MongoDatabaseFactory 를 사용하자.
@Configuration
public class MongoDBConfig {
@Value("${spring.data.mongodb.uri}")
private String mongodb_uri;
@Bean(name = "mongoTemplate1")
public MongoTemplate mongoTemplate1() {
MongoClient mongoClient = MongoClients.create(mongodb_uri);
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(mongoClient, "collection1");
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(factory, converter);
}
@Bean(name = "mongoTemplate2")
public MongoTemplate mongoTemplate2() {
MongoClient mongoClient = MongoClients.create(mongodb_uri);
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(mongoClient, "collection2");
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(factory, converter);
}
@Bean(name = "mongoTemplate3")
public MongoTemplate mongoTemplate3() {
MongoClient mongoClient = MongoClients.create(mongodb_uri);
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(mongoClient, "collection3");
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), new MongoMappingContext());
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(factory, converter);
}
}
다음과 같이 document 가 여러개이면 document 마다 template 을 나누어서 빈을 등록해준다.
_class 삭제방법
여기서 _class 를 없애는 방법은 위의 코드와 같이
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
컨버터에 null 을 세팅을 기본으로 해주어야 한다.
방법은 여러가지가 있겟지만, 해당 방법이 코드량 적고 각각 document 마다 설정 가능하다는 점이 장점이다.
auto localhost 몽고 연결 수정
이대로만 하면 아마 spring boot 가 시작시 자동으로 localhost 27017 로 몽고디비가 연결을 시도한다.
이 점을 수정하려면 시작시에 자동으로 시작되는 class 를 제외시켜주면 된다.
@SpringBootApplication 에 exclude 에 MongoDataAutoConfiguration.class 를 추가해주자.
@SpringBootApplication(exclude = { MongoDataAutoConfiguration.class})
public class MongoApplication {
public static void main(String[] args) {
SpringApplication.run(MongoApplication.class, args);
}
}
yml 파일도 설정해주자
spring:
data:
mongodb:
uri: mongodb://아이디:비번@몽고디비url:27017
yml 로만 설정을 하게되면 스프링몽고디비 3 버젼에서는 로컬로만 연결이 됐다.
해결방법을 찾지 못해도 다음처럼 mongotemplate 을 구성한 이유도 있다.
@Value 로 설정값을 가져와서 연결하는 방법이다.
그래서 실질적으로 어플리케이션이 올라가면서 몽고디비 커넥션을 맺는방식은 아니고 빈을 생성시에 yml 에서 값을 가져와서 mongoTemplate 에 사용을 한다.
yml 에 굳이 계정정보를 넣지 않아도 되지만, 자바코드보다는 yml 에 설정값을 넣는 편이 낫다.
'Spring > spring boot 및 기타' 카테고리의 다른 글
[SPRING] 스프링 스케쥴링 추가 @Scheduled (0) | 2020.09.27 |
---|---|
vscode 로 스프링부트 실행하기 (0) | 2020.09.18 |
[spring] spring boot 초기 구동 시키기 및 초기화 코드 (0) | 2020.08.29 |
[SPRING BOOT] 스프링 부트 2.3 변경된 내용 (0) | 2020.06.21 |
[Spring Boot] 스프링 부트 시작 Main (0) | 2020.05.25 |