MongoDB

Spring集成MongoDB

Posted by 高明 on 2020-06-08

MongoDb

安装 MongoDb

配置

mongodb.conf

1
2
3
4
5
6
dbpath=/var/lib/mongo                                                                                                                     logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
port=27017
bind_ip=0.0.0.0
auth=true

启动服务

1
2
3
# 启动服务
./mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
./mongod --config mongodb.conf

关闭服务

1
2
# 关闭服务
./mongod --shutdown --dbpath /var/lib/mongo

创建用户

1
2
db.createUser({user:"test",pwd:"test",roles: [{role: "root", db: "db_name"}]})
db.createUser({user:"test",pwd:"test",roles:['readWrite']})
1
2
mongo -utest -ptest
db.auth("test","test")

SpringData 集成

1
2
3
4
5
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.1.0</version>
</dependency>
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
@Configuration
@PropertySource(value = "classpath:mongo.properties")
@EnableMongoRepositories(basePackages = "com.biz.mongo.repositories")
public class MongoConfig {

@Value("${mongo.host:}")
private String host;
@Value("${mongo.port:}")
private int port;
@Value("${mongo.dbname:db_name}")
private String dbname;
@Value("${mongo.username:test}")
private String username;
@Value("${mongo.password:test}")
private String password;
@Value("${mongo.connectionsPerHost:10}")
private int connectionsPerHost;
@Value("${mongo.threadsAllowedToBlockForConnectionMultiplier:5}")
private int multiplier;
@Value("${mongo.connectTimeout:1000}")
private int connectTimeout;
@Value("${mongo.maxWaitTime:1500}")
private int maxWaitTime;
@Value("${mongo.socketKeepAlive:true}")
private boolean socketKeepAlive;
@Value("${mongo.socketTimeout:1500}")
private int socketTimeout;

@Bean
public MongoClientFactoryBean mongo() {

MongoClientOptions options = MongoClientOptions.builder()
.threadsAllowedToBlockForConnectionMultiplier(multiplier)
.connectionsPerHost(connectionsPerHost)
.connectTimeout(connectTimeout)
.maxWaitTime(maxWaitTime)
.socketTimeout(socketTimeout)
.build();

MongoClientFactoryBean mongo = new MongoClientFactoryBean();
MongoCredential[] mongoCredentials = new MongoCredential[1];
mongoCredentials[0] = MongoCredential.createCredential(username, dbname, password.toCharArray());
mongo.setHost(host);
mongo.setPort(port);
mongo.setCredentials(mongoCredentials);
mongo.setMongoClientOptions(options);
return mongo;
}

@Bean(value = "mongoTemplate")
public MongoOperations mongoTemplate(Mongo mongo) {
return new MongoTemplate((MongoClient) mongo, dbname);
}
}

Po

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "page_config")
public class MongoPageConfigPo {
@Id()
private Long pageId;

@Field("config")
private Object config;

@Field("accountId")
private Integer accountId;
}

IMongoPageRepository

1
2
public interface IMongoPageRepository extends MongoRepository<MongoPageConfigPo, Long> {
}

IMongoPageService 业务接口与实现

1
2
3
4
5
6
7
8
9
public interface IMongoPageService {

/**
* 插入页面配置
*
* @param dto
*/
void savePage(MongoPageDto dto);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Service
public class MongoPageServiceImpl implements IMongoPageService {

@Autowired
private IMongoPageRepository MongoPageRepository;

@Override
public void savePage(MongoPageDto dto) {
MongoLandPageConfigPo po = convertMongoPageDto2Po(dto);
MongoPageRepository.save(po);
}

private MongoLandPageConfigPo convertMongoPageDto2Po(MongoPageDto dto) {
return MongoLandPageConfigPo.builder()
.pageId(dto.getPageId())
.config(dto.getConfig())
.accountId(dto.getAccountId())
.build();
}
}

本地测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyMain {
public static void main(String[] args) {
//连接服务器端的地址和端口号
ServerAddress serverAddress = new ServerAddress("127.0.0.1", 27017);
//project数据库的用户名为:test 密码:test
char[] password = "test".toCharArray();
//创建 用户名和密码认证
MongoCredential mongoCredential = MongoCredential.createCredential("test", "db_name", password);
List<MongoCredential> mongoCredentialList = new ArrayList<MongoCredential>();
mongoCredentialList.add(mongoCredential);

//连接MongoDB的一个数据库,需要用户名、密码、数据库、服务器端的IP和端口号
MongoClient mongoClient = new MongoClient(serverAddress, mongoCredentialList);
MongoDatabase mongoDatabase = mongoClient.getDatabase("db_name");
mongoDatabase.createCollection("777");

System.out.println("connect successfully!");
}
}