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());
}