Spring整合MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
文档翻译,文档翻译 1千页
图片翻译,图片翻译 100张
简介:




版本:

spring:4.1.3.RELEASE

mongo-java-driver.version:3.4.1

spring-data-mongodb.version:1.7.0.RELEASE


配置:

1、pom.xml中添加核心依赖(两个)

+++++++++++++++++++++++++++++++++++++++++++++++++++++

1
2
3
4
5
6
7
8
9
10
11
12
                 <!-- mongo-java-dirver -->
         <dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongo-java-driver</artifactId>
             <version> 3.4 . 1 </version>
         </dependency>
         <!-- spring-data-mongodb -->
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-mongodb</artifactId>
             <version> 1.7 . 0 .RELEASE</version>
         </dependency>

++++++++++++++++++++++++++++++++++++++++++++++++++++++

完整pom.xml文件内容如下:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<project xmlns= "http://maven.apache.org/POM/4.0.0"  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
     <modelVersion> 4.0 . 0 </modelVersion>
     <groupId>com.fwmagic.mongo</groupId>
     <artifactId>fwmagic-mongo</artifactId>
     <version> 1.0 . 0 -SNAPSHOT</version>
 
     <properties>
         <junit.version> 4.12 </junit.version>
         <spring.version> 4.1 . 3 .RELEASE</spring.version>
         <fastjson.version> 1.2 . 15 </fastjson.version>
         <slf4j.version> 1.6 . 4 </slf4j.version>
         <joda-time.version> 2.5 </joda-time.version>
         <commons-lang3.version> 3.3 . 2 </commons-lang3.version>
         <commons-io.version> 1.3 . 2 </commons-io.version>
         <mongo-java-driver.version> 3.4 . 1 </mongo-java-driver.version>
         <spring-data-mongodb.version> 1.7 . 0 .RELEASE</spring-data-mongodb.version>
 
         <env>dev</env>
         <project.build.sourceEncoding>UTF- 8 </project.build.sourceEncoding>
         <maven.compiler.encoding>UTF- 8 </maven.compiler.encoding>
     </properties>
 
     <dependencies>
         <!--junit -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
         </dependency>
 
         <!-- fastjson -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>${fastjson.version}</version>
         </dependency>
 
         <!-- Spring -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context-support</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-aspects</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <!-- slf4j日志 -->
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
         <!-- Apache工具组件 -->
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>${commons-lang3.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-io</artifactId>
             <version>${commons-io.version}</version>
         </dependency>
         <!-- 时间操作组件 -->
         <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
             <version>${joda-time.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
             <version> 2.0 </version>
         </dependency>
         <!-- mongo-java-dirver -->
         <dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongo-java-driver</artifactId>
             <version>${mongo-java-driver.version}</version>
         </dependency>
         <!-- spring-data-mongodb -->
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-mongodb</artifactId>
             <version>${spring-data-mongodb.version}</version>
             <exclusions>
                 <exclusion>
                     <artifactId>slf4j-api</artifactId>
                     <groupId>org.slf4j</groupId>
                 </exclusion>
             </exclusions>
         </dependency>
     </dependencies>
     <build>
         <plugins>
             <!-- java编译插件 -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version> 3.2 </version>
                 <configuration>
                     <source> 1.7 </source>
                     <target> 1.7 </target>
                     <encoding>UTF- 8 </encoding>
                 </configuration>
             </plugin>
             <!-- 配置Tomcat插件 -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <version> 2.6 </version>
                 <configuration>
                     <archiveClasses> true </archiveClasses>
                     <packagingExcludes>WEB-INF/classes/**</packagingExcludes>
                     <webResources>
                         <resource>
                             <directory>src/main/webapp/WEB-INF</directory>
                             <includes>
                                 <include>applicationContext.xml</include>
                             </includes>
                             <filtering> true </filtering>
                             <targetPath>WEB-INF</targetPath>
                         </resource>
                     </webResources>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version> 2.7 . 1 </version>
             </plugin>
         </plugins>
     </build>
</project>


2、mongo.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
####################################################
###MongoDB configuration
####################################################
mongo.host=localhost
mongo.port= 27017
mongo.dbname=demodb
mongo.username=admin
mongo.password= 123456
#一个线程变为可用的最大阻塞数
mongo.connectionsPerHost= 8
#线程队列数,它与以上面connectionsPerHost值相乘的结果就是线程队列最大值
mongo.threadsAllowedToBlockForConnectionMultiplier= 4
#连接超时时间(毫秒) 
mongo.connectTimeout= 1500
#最大等待时间
mongo.maxWaitTime= 1500
#自动重连
mongo.autoConnectRetry= true
#scoket保持活动
mongo.socketKeepAlive=  true
#scoket超时时间
mongo.socketTimeout= 1500
#读写分离
mongo.slaveOk= true


3、applicationContext.xml

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
<?xml version= "1.0"  encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
     xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"  xmlns:p= "http://www.springframework.org/schema/p"
     xmlns:context= "http://www.springframework.org/schema/context"
     xmlns:mvc= "http://www.springframework.org/schema/mvc"  xmlns:mongo= "http://www.springframework.org/schema/data/mongo"
     xsi:schemaLocation="http: //www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http: //www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
         http: //www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
         http: //www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
         
     <!--配置service的包扫描,自动注入Service -->
     <context:component-scan base- package = "com.fwmagic"  />
 
     <!-- 使用spring自带的占位符替换功能 -->
     <bean
         class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
         <!-- 允许JVM参数覆盖 -->
         <property name= "systemPropertiesModeName"  value= "SYSTEM_PROPERTIES_MODE_OVERRIDE"  />
         <!-- 忽略没有找到的资源文件 -->
         <property name= "ignoreResourceNotFound"  value= "true"  />
         <!-- 配置资源文件 -->
 
         <property name= "locations" >
             <list>
                 <value>classpath:mongo.properties</value>
                 <value>classpath:log4j.properties</value>
             </list>
         </property>
     </bean>
     
         <!--credentials的配置形式是:用户名:密码@默认数据库 -->
     <mongo:mongo-client id= "mongoClient"  host= "${mongo.host}"
         port= "${mongo.port}"  credentials= "${mongo.username}:${mongo.password}@${mongo.dbname}" >
         <mongo:client-options write-concern= "SAFE"
             connections-per-host= "${mongo.connectionsPerHost}"
             threads-allowed-to-block- for -connection-multiplier= "${mongo.threadsAllowedToBlockForConnectionMultiplier}"
             connect-timeout= "${mongo.connectTimeout}"  max-wait-time= "${mongo.maxWaitTime}"
             socket-timeout= "${mongo.socketTimeout}"  />
     </mongo:mongo-client>
 
     <mongo:db-factory id= "mongoDbFactory"  dbname= "${mongo.dbname}"
         mongo-ref= "mongoClient"  />
 
     <bean id= "mongoTemplate"  class = "org.springframework.data.mongodb.core.MongoTemplate" >
         <constructor-arg name= "mongoDbFactory"  ref= "mongoDbFactory"  />
     </bean>
</beans>


单元测试:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package  com.fwmagic.dao;
 
import  java.util.Date;
import  java.util.List;
 
import  org.junit.Test;
import  org.junit.runner.RunWith;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.data.mongodb.core.MongoTemplate;
import  org.springframework.data.mongodb.core.query.Criteria;
import  org.springframework.data.mongodb.core.query.CriteriaDefinition;
import  org.springframework.data.mongodb.core.query.Query;
import  org.springframework.data.mongodb.core.query.Update;
import  org.springframework.test.context.ContextConfiguration;
import  org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import  com.fwmagic.pojo.Notice;
 
@RunWith (SpringJUnit4ClassRunner. class )
@ContextConfiguration ( "classpath:spring/applicationContext*.xml" )
public  class  NoticeDAOTest {
 
     @Autowired
     private  NoticeDAO dao;
     
     /**
      * 查询所有文档
      */
     @Test
     public  void  testList() {
         Query query =  new  Query();
         List<Notice> notice = dao.list(query, Notice. class );
         for  (Notice n : notice) {
             System.out.println(n);
         }
     }
 
     /**
      * 插入文档
      */
     @Test
     public  void  testInsert(){
         Notice notice =  new  Notice();
         notice.setSiteId( 7 );
         notice.setCreator( "diaochan" );
         notice.setTitle( "今天星期一" );
         notice.setUpdateTime( new  Date());
         dao.insert(notice);
     }
     
     /**
      * 更新文档
      */
     @Test
     public  void  testUpdate(){
         Criteria criteria =  new  Criteria();
         criteria.and( "creator" ).is( "zhaojun" );
         Query query =  new  Query(criteria);
         dao.update(query, Update.update( "createTime" new  Date()), Notice. class );
     }
     
     /**
      * 删除一行文档
      */
     @Test
     public  void  testRemove(){
         Criteria criteria =  new  Criteria();
         criteria.and( "creator" ).is( "zhaojun" );
         Query query =  new  Query(criteria);
         dao.remove(query, Notice. class );
     }
     
     //未完待续……
}


NoticeDAO.java

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
package  com.fwmagic.dao;
 
import  java.util.List;
 
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.data.mongodb.core.MongoTemplate;
import  org.springframework.data.mongodb.core.query.Query;
import  org.springframework.data.mongodb.core.query.Update;
import  org.springframework.stereotype.Repository;
 
import  com.fwmagic.pojo.Notice;
import  com.mongodb.WriteResult;
 
@Repository
public  class  NoticeDAO  implements  BaseDAO<Notice>{
 
     @Autowired
     private  MongoTemplate mt;
     
     @Override
     public  List<Notice> list(Query query, Class<Notice> entityClass) {
         return  mt.find(query, entityClass);
     }
 
     @Override
     public  Notice findOne(Query query, Class<Notice> entityClass) {
         return  mt.findOne(query, entityClass);
     }
     
     @Override
     public  void  insert(Notice notice){
         mt.insert(notice);
     }
     
     @Override
     public  WriteResult update(Query query, Update update, Class<?> entityClass){
         return  mt.updateFirst(query, update, entityClass);
     }
     
     @Override
     public  void  remove(Query query, Class<?> entityClass){
         mt.remove(query, entityClass);
     }
}


完整demo请移步此处查看.



本文转自 兴趣e族 51CTO博客,原文链接:http://blog.51cto.com/simplelife/1932408

相关文章
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
660 1
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
NoSQL Java MongoDB
Spring 5整合MongoDB
【5月更文挑战第9天】
166 2
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
382 0
|
4月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
4月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
355 79
|
4月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
229 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

热门文章

最新文章

推荐镜像

更多