SpringBoot 实战系列之五:SpringBoot+Mongodb的集成实战

1. 安装mongoDB

  • mongoDB下载

下载网址是:https://www.mongoDB.com/-center#community。 直接下载msi安装版:mongoDB-win32-x86_64-2008plus-ssl-3.4.3-signed.msi

  • mongoDB安装

    创建data目录和log目录,我把mongoDB安装到E:\mongoDB下,在本目录创建data,data下创建db文件夹和log文件夹。

  • 安装为Windows服务

进入E:\mongoDB\bin 按shift,右键点击在此次打开命令窗口
e:\mongoDB\bin>mongod.exe --logpath "e:\mongoDB\data\log\mongodb.log" --logappend --dbpath "e:\mongoDB\data\db" --serviceName "mongoDB" --install
    参数    描述
    --bind_ip    绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
    --logpath    定mongoDB日志文件,注意是指定文件不是目录
    --logappend    使用追加的方式写日志
    --dbpath    指定数据库路径
    --port    指定服务端口号,默认端口27017
    --serviceName    指定服务名称
    --serviceDisplayName    指定服务名称,有多个mongoDB服务时执行。
    --install    指定作为一个Windows服务安装。

  • 开启服务并导入数据

    Data文件夹下是数据文件。
    导入语法:
        mongorestore.exe -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
    注:windows下无论是备份数据还是恢复数据,都是使用的bin目录下的exe服务,所有首先要cd到bin目录
    示例:E:\mongoDB\bin> mongorestore.exe -h 127.0.0.1 --port 27017 -d Data --drop D:\Data

2. Pom.xml 

<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.cloud.storage</groupId>
	<artifactId>BD_StorageServer_Maven</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<properties>
		<webVersion>3.1</webVersion>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version>4.3.7.RELEASE</spring.version>
		<jackson.version>2.5</jackson.version>
		<jdk.version>1.7</jdk.version>
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>${jdk.version}</source>
					<target>${jdk.version}</target>
				</configuration>
			</plugin>
		</plugins>
	</build>


	<dependencies>

		<!-- servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- spring常用配置 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</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-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- file upload -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- aop -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.7.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>


		<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.0.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- mongodb -->
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.4.0</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-mongodb</artifactId>
			<version>1.10.6.RELEASE</version>
		</dependency>

		<!-- 添加数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>

		<!-- hbase相关 -->
		<dependency>
			<groupId>org.apache.hbase</groupId>
			<artifactId>hbase-client</artifactId>
			<version>0.98.13-hadoop2</version>
		</dependency>

		<!-- spring Hbase -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-jpa</artifactId>
			<version>1.6.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-hadoop</artifactId>
			<version>2.0.2.RELEASE</version>
		</dependency>

		<!-- json配置 -->
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.3</version>
			<classifier>jdk15</classifier>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.17</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.6</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>



	</dependencies>
</project>

3. MongodbBaseDao 

package com.cloud.storage.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import com.mongodb.DBCollection;

/**
 * spring mongodb抽象父类,封装一些常用的方法
 * 
 * @author Administrator
 *
 * @param <T>
 */
public abstract class MongodbBaseDao<T> {

	Logger log = Logger.getLogger(this.getClass());
	// spring mongodb 集成操作类
	protected MongoTemplate mongoTemplate;

	// 链接本地数据库并创建数据表
	public void CreateCollection(String collectionName) {
		try {
			log.info("Collection created successfully");
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 获取数据表
	public DBCollection GetCollection(String collectionName) {
		DBCollection coll = null;
		try {
			coll = mongoTemplate.getCollection(collectionName);
			return coll;
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
		return coll;
	}

	// 通过条件查询实体(集合)
	public List<T> Listfind(Query query) {
		return mongoTemplate.find(query, this.getEntityClass());
	}

	// 通过一定的条件查询一个实体
	public T findOne(Query query) {
		return (T) mongoTemplate.findOne(query, this.getEntityClass());
	}

	// 通过条件查询更新数据
	public void update(Query query, Update update) {
		mongoTemplate.upsert(query, update, this.getEntityClass());
	}

	// 保存一个对象到mongodb
	public T save(T bean) {
		mongoTemplate.save(bean);
		return bean;
	}

	// 通过ID获取记录
	public T get(String id) {
		return (T) mongoTemplate.findById(id, this.getEntityClass());
	}

	// 通过ID获取记录,并且指定了集合名
	public T get(String id, String collectionName) {
		return (T) mongoTemplate.findById(id, this.getEntityClass(), collectionName);
	}

	// 获取需要操作的实体类class
	protected abstract Class getEntityClass();

	// spring容器注入mongodbTemplate
	protected abstract void setMongoTemplate(MongoTemplate mongoTemplate);

}

3. 定义接口PatientMongoDao

package com.cloud.storage.dao;

import com.cloud.storage.base.Domain.Patient;

/**
 * 患者的Dao层
 * 
 * @author Administrator
 *
 */
public interface PatientMongoDao {

	void savePatient(Patient patient);

}

4. 定义接口实现PatientMongoDaoImpl

package com.cloud.storage.daoImpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;

import com.cloud.storage.base.Domain.Patient;
import com.cloud.storage.dao.MongodbBaseDao;
import com.cloud.storage.dao.PatientMongoDao;

/**
 * 用户信息dao层实现类(用于操作Mongodb)
 * 
 * @author Administrator
 *
 */
@Repository
public class PatientMongoDaoImpl extends MongodbBaseDao<Patient> implements PatientMongoDao {

	@Override
	protected Class getEntityClass() {
		// TODO Auto-generated method stub
		return Patient.class;
	}

	@Autowired
	@Override
	protected void setMongoTemplate(@Qualifier(value = "mongoTemplate") MongoTemplate mongoTemplate) {
		super.mongoTemplate = mongoTemplate;
	}

	@Override
	public void savePatient(Patient patient) {
		super.save(patient);
	}

}

6. 定义实体类patient

package com.cloud.storage.base.Domain;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

/**
 * 患者信息JavaBean
 * 
 * @author Administrator
 *
 */
@Document(collection = "patient")
public class Patient implements java.io.Serializable {
	private static final long serialVersionUID = 2284954391490103232L;
	@Id
	private Integer patientId;
	private String idcard;
	// 姓名
	private String name;
	// 联系电话
	private String phone;
	private String email;
	private String deviceId;
	private String appType;
	// 性别
	private Integer sex;
	private String birth;
	// 年龄
	private String age;
	// 单位
	private String unit;
	// 部门
	private String dept;

	// Constructors

	/** default constructor */
	public Patient() {
	}

	/** minimal constructor */
	public Patient(String appType) {
		this.appType = appType;
	}

	/** full constructor */
	public Patient(String idcard, String name, String phone, String email, String deviceId, String appType, Integer sex,
			String birth) {
		this.idcard = idcard;
		this.name = name;
		this.phone = phone;
		this.email = email;
		this.deviceId = deviceId;
		this.appType = appType;
		this.sex = sex;
		this.birth = birth;
	}

	// Property accessors

	public Integer getPatientId() {
		return this.patientId;
	}

	public void setPatientId(Integer patientId) {
		this.patientId = patientId;
	}

	public String getIdcard() {
		return this.idcard;
	}

	public void setIdcard(String idcard) {
		this.idcard = idcard;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPhone() {
		return this.phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getDeviceId() {
		return this.deviceId;
	}

	public void setDeviceId(String deviceId) {
		this.deviceId = deviceId;
	}

	public String getAppType() {
		return this.appType;
	}

	public void setAppType(String appType) {
		this.appType = appType;
	}

	public Integer getSex() {
		return this.sex;
	}

	public void setSex(Integer sex) {
		this.sex = sex;
	}

	public String getBirth() {
		return this.birth;
	}

	public void setBirth(String birth) {
		this.birth = birth;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getUnit() {
		return unit;
	}

	public void setUnit(String unit) {
		this.unit = unit;
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}

7. 测试CommonRestfulController 

package com.cloud.storage.controller;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.cloud.storage.base.Domain.SportsData;
import com.cloud.storage.pattern.state.Context;
import com.cloud.storage.service.SportsDataHbaseService;
import com.cloud.storage.service.ObservationService;
import com.cloud.storage.service.PatientService;
import com.cloud.storage.service.SportsDataService;
import com.cloud.storage.util.DateUtil;
import com.cloud.storage.util.JsonUtil;
import com.cloud.storage.util.PropertiesReader;
import com.cloud.storage.util.ResponseUtil;
import com.cloud.storage.util.ValidateUtil;

import net.sf.json.JSONObject;

/**
 * 数据接收接口,与DispatchServer转发服务进行数据对接
 * 
 * @author Administrator
 *
 */
@Controller
public class CommonRestfulController {

	@Autowired
	private ObservationService observationService;

	@Autowired
	private SportsDataService sportsDataService;
	@Autowired
	private SportsDataHbaseService sportsDataHbaseService;
	@Autowired
	private PatientService patientService;

	private static Logger log = Logger.getLogger(CommonRestfulController.class);

	/**
	 * 数据采集接口
	 * 
	 * @param request
	 * @param response
	 * @throws Exception 
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	@RequestMapping(value = "/businessDataReceive")
	public void businessDataReceive(HttpServletRequest request, HttpServletResponse response) throws Exception {
		log.info("the start of businessDataReceive ");
		Map result = new HashMap();
		log.info("收到网关DispatchServer发来数据*_*... \r\n");
		String jsonData = "";
		try {
			jsonData = new String((request.getParameter("data").getBytes("iso-8859-1")), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			log.error("receive data occur exception:" + e.getMessage());
		}
		JSONObject jo = JSONObject.fromObject(jsonData);
		// 数据参数校验
		String validateInfo = "" + ValidateUtil.checkAppType(JsonUtil.getJsonParamterString(jo, "appType"))
				+ (ValidateUtil.isValid(JsonUtil.getJsonParamterString(jo, "dataType")) == true ? "" : "false")
				+ ValidateUtil.checkDateTime(JsonUtil.getJsonParamterString(jo, "collectDate"))
				+ (ValidateUtil.isValid(JsonUtil.getJsonParamterString(jo, "phone")) == true ? "" : "false");
		// 校验通过
		if ("".equals(validateInfo)) {
			String isMongo = PropertiesReader.getProp("mongodb");
			String isMysql = PropertiesReader.getProp("mysql");
			String isHbase = PropertiesReader.getProp("hbase");
			System.out.println("isMongo-----------------------------------" + isMongo);
			
			Map<String,Class>classMap=new HashMap<>();
			
			classMap.put("dataValue", HashMap.class);
			// 入库mongodbJSONObject
			SportsData sportsData = (SportsData) JSONObject.toBean(JSONObject.fromObject(jsonData),
					SportsData.class,classMap);
			if ("true".equals(isMongo)) {
				// 入库mongodb
				sportsDataService.saveSportsData(sportsData);
			} else if ("true".equals(isMysql)) {
				// 入库mysql
				new Context(request, response, observationService,patientService).request();
			} else if ("true".equals(isHbase)) {
				// 入Hbase库
				sportsDataHbaseService.saveData(sportsData);
			}
		} else {
			response.setStatus(412);
			result.put("status", "数据验证失败!" + validateInfo);
			log.info("the end of businessDataReceive has invalidate param include " + validateInfo);
		}
		response.setStatus(200);
		ResponseUtil.writeInfo(response, JSONObject.fromObject(result).toString());
	}

猜你喜欢

转载自blog.csdn.net/Peter_Changyb/article/details/108201167