spring整合mongodb最长的路,是spring和mongodb版本互斥的套路!!!!!!!!!!!
一、导入依赖
我尝试了二十多种mongodb jar版本的组合,
1.要么是bean(service)无法注入,
2.要么就是mongoTemplate无法注入
3.要么就是NoSuchMethodError
4.要么就是找不到classpath下的application.xml
5.要么就是···············································
"惊喜"无时无刻的不在摧残、折磨着我本就弱小的内心,消磨我的意志。
第一章:初见mongodb
从名字上看,这应该是一个温文尔雅般的一门技术,我便毫不在意的告诉我的老朋友spring,你喜欢她吗?你看她的名字—mongodb—读起来朗朗上口,并且名声远扬,在非关系型数据库的市场上大杀四方,从而名垂青史。我撮合你们一下?spring连忙回答:我其实早有此意了,不瞒兄台,婚房早已备好,并起名mogoTemplate,万事俱备,只差Autowired!!!
第二章:艰难的提亲路
至此,我便带上豪礼为我的老朋友spring上门提亲,至于为什么是我上门提亲,spring的家人为何不去呢?大家应该都知道spring家族在java市场的重要地位导致了所有的程序员都得和spring打交道,这是无法避免的,spring家族向社会的自我介绍是"程序员的春天",但在程序员的心中spring即是春天也是春天中的冬天,因此有不少的激进分子会做出一些过分的事情,因此我就来了。但我来到了mongodb家门口,发现一位白胡子老头早已等在了门口,看着我手中的礼物问道,不知少侠这次来提亲都带了什么聘礼呢?我自信的回答道:java家族生产的汽车一辆(mongo-java-driver),并由spring家族提供给mongodb家族data一份(spring-data-mongodb),白胡子大爷听到后便通过NoSuchMethodError将我拒之门为。我一脸茫然!
第三章:看门大爷源源不断的套路
spring家里提供的婚房(mongoTemplate)太小,我家小姐无法入住
spring家的服务太差,service质量导致我家小姐无法入住
第四章:提亲成功
我自降身段,并做主将spring家族的身段也给降了
spring版本从4.2.3----->4.1.3------->提亲成功
<!-- spring版本号 -->
<spring.version>4.1.3.RELEASE</spring.version>
<!--MongoBD-Spring整合-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
二、配置文件
1.application.xml
添加读取mongodb.properties文件配置
由于mongodb.properties文件中的数据在<mongo:client-options />标签中无法读取,因此下面的mongodb.properties可以删除,数据将写死在spring-mongodb.xml中
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:mongodb.properties</value>
<value>classpath:db.properties</value>
</list>
</property>
</bean>
2.mongodb.properties
不知什么原因,此文件中的内容在<mongo:client-options />标签中无法读取,在此标签之外可以读取,因此我将数据写死在了spring-mongodb.xml中
mongo.hostPort=127.0.0.1:27017
mongo.dbName=test
#mongo.username=用户名
#mongo.password=密码
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
mongo.connectTimeout=1000
#\u7B49\u5F85\u65F6\u95F4
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
#Socket\u8D85\u65F6\u65F6\u95F4
mongo.socketTimeout=1500
mongo.slaveOk=true
3.spring-mongodb.xml
<?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:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<mongo:mongo-client id="mongo" host="127.0.0.1" port="27017">
<mongo:client-options
connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000"
max-wait-time="1500"
socket-keep-alive="true"
socket-timeout="1500"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="test" mongo-ref="mongo" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
</beans>
4.web.xml
读取spring-mongodb.xml文件
<!-- spring监听 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml,
classpath:spring-mongodb.xml
</param-value>
</context-param>
三、java代码测试
controller.java
/**
* Created by yan on 2019/3/8.
*/
@Controller
public class UserController {
@Autowired
private IUserService iUserService;
@Autowired
private MongoTemplate mongoTemplate;
@RequestMapping("list")
@ResponseBody
public String selectUser(){
List<User> userList = iUserService.selectUserList();
for (int i = 0; i < userList.size(); i++) {
//将从数据库查处的对象集合循环放进mongodb
mongoTemplate.save(userList.get(i),"bingjie");
}
//查询mongodb中的数据
List<User> all = mongoTemplate.findAll(User.class);
//在控制台中
System.out.println(all);
return "那就暂时这样吧";
}
}
//entity 略
//service.java 略
//mapper.java 略
//mapper.xml 略
OutPut:
[User{usId=1, usName='闫创业', usAge=11},
User{usId=2, usName='闫冰杰', usAge=12},
User{usId=3, usName='闫徵', usAge=13}]