spring整合mongodb之走的最长的路---mongodb jar 包版本的套路

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}]

猜你喜欢

转载自blog.csdn.net/weixin_44030218/article/details/88369016