springboot整合mongodb

引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

yml配置

单机版

1
2
3
4
5
6
7
8
spring:
data:
mongodb:
host: 127.0.0.0
port: 27017
username: admin
password: admin
database: admin

副本集

1
2
3
data:
mongodb:
uri: mongodb://192.168.186.128:27017,192.168.186.131:27018,192.168.186.132:27019/bilibili?username=admin&password=admin

MongoTemplate配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.springboot.common.config;

import com.mongodb.WriteConcern;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.WritingConverter;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.*;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Collections;

@Configuration
public class MongoConfig {

/**
* 加载映射转换器
*/
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
//去掉默认mapper添加的_class
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}

/**
* 初始化MongoTemplate
* <p>
* WriteConcern.NONE:没有异常抛出
* WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
* WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
* WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
* WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
* WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
* WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
* </p>
*/
@Bean
public MongoTemplate mongoTemplate(MongoDatabaseFactory factory, MappingMongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(factory, converter);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
return mongoTemplate;
}
}

如果有某些数据类型转换需要,比如想让存入mongo的所有小数都保留小数后2位,如果不想用代码控制,可以定义一个转换器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.example.springboot.common.config;

import com.mongodb.WriteConcern;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.WritingConverter;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.*;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Collections;

@Configuration
public class MongoConfig {

/**
* 自定义转换器(BigDecimal转换成Double,只在写入时转换)
*/
@Component
@WritingConverter
public static class BigDecimalToDouble implements Converter<BigDecimal, Double> {
@Override
public Double convert(BigDecimal bigDecimal) {
return bigDecimal.doubleValue();
}
}

/**
* 加载自定义转换器
*/
@Bean
public MongoCustomConversions mongoCustomConversions(BigDecimalToDouble bigDecimalToDouble) {
return new MongoCustomConversions(Collections.singletonList(bigDecimalToDouble));
}

@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context, MongoCustomConversions conversions) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
//添加自定义的转换器
mappingConverter.setCustomConversions(conversions);
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}

@Bean
public MongoTemplate mongoTemplate(MongoDatabaseFactory factory, MappingMongoConverter converter) {
MongoTemplate mongoTemplate = new MongoTemplate(factory, converter);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
return mongoTemplate;
}
}

文章目录
  1. 1. 引入依赖
  2. 2. yml配置
    1. 2.1. 单机版
    2. 2.2. 副本集
  3. 3. MongoTemplate配置类
|