首先我们需要一个生成和配置mongodb的工厂类:
1 public class mongofactorybean extends abstractfactorybean
2
3 // 表示服务器列表(主从复制或者分片)的字符串数组
4 private string[] serverstrings;
5 // mongodb配置对象
6 private mongooptions mongooptions;
7 // 是否主从分离(读取从库),默认读写都在主库
8 private boolean readsecondary = false;
9 // 设定写策略(出错时是否抛异常),默认采用safe模式(需要抛异常)
10 private writeconcern writeconcern = writeconcern.safe;
11
12 @override
13 public class??> getobjecttype() {
14 return mongo.class;
15 }
16
17 @override
18 protected mongo createinstance() throws exception {
19 mongo mongo = initmongo();
20
21 // 设定主从分离
22 if (readsecondary) {
23 mongo.setreadpreference(readpreference.secondarypreferred());
24 }
25
26 // 设定写策略
27 mongo.setwriteconcern(writeconcern);
28 return mongo;
29 }
30
31 /**
32 * 初始化mongo实例
33 * @return
34 * @throws exception
35 */
36 private mongo initmongo() throws exception {
37 // 根据条件创建mongo实例
38 mongo mongo = null;
39 list
40
41 if (serverlist.size() == 0) {
42 mongo = new mongo();
43 }else if(serverlist.size() == 1){
44 if (mongooptions != null) {
45 mongo = new mongo(serverlist.get(0), mongooptions);
46 }else{
47 mongo = new mongo(serverlist.get(0));
48 }
49 }else{
50 if (mongooptions != null) {
51 mongo = new mongo(serverlist, mongooptions);
52 }else{
53 mongo = new mongo(serverlist);
54 }
55 }
56 return mongo;
57 }
58
59
60 /**
61 * 根据服务器字符串列表,解析出服务器对象列表
62 *
63 *
64 * @title: getserverlist
65 *
66 *
67 * @return
68 * @throws exception
69 */
70 private list
71 list
72 try {
73 for (string serverstring : serverstrings) {
74 string[] temp = serverstring.split(":");
75 string host = temp[0];
76 if (temp.length > 2) {
77 throw new illegalargumentexception(
78 "invalid server address string: " + serverstring);
79 }
80 if (temp.length == 2) {
81 serverlist.add(new serveraddress(host, integer
82 .parseint(temp[1])));
83 } else {
84 serverlist.add(new serveraddress(host));
85 }
86 }
87 return serverlist;
88 } catch (exception e) {
89 throw new exception(
90 "error while converting serverstring to serveraddresslist",
91 e);
92 }
93 }
94
95 /* ------------------- setters --------------------- */
96 }