MongoRepository 是spring-data 里面针对MongoDB整合提供的一个简化与数据库交互,spring去除dao层的代码编写。spring-data包还提供了针对Hadoop、solr。当然对应的接口名字也是不同的。
spring Data能自动创建实体dao的实现类和自定义查询,不再需要我们自己去实现了。
公司项目是一个大型分布式 互联网接口服务。整改日志操作,转移接口压力。生产环境每天大概将近4-7G的日志文件。将日志不是重要性数据转移到MongoDB,来分减压力。
在整合过程中发现了spring -data MongoRepository接口
目录结构
MonitorRepository 继承MongoRepository接口
org.springframework.data.mongodb.repository.MongoRepository<T
,
Serializable
>
package com.sinosoft.ebusiness.mongo.model;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* POJO类MonitorLog
*/
@Document()//
public class MonitorLog implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/** 属性序列号(SerialNo) */
@Id
private String serialNo;
/** 属性用户名(UserName) */
private String userName;
/** 属性IP地址(IPADD) */
private String ipadd;
/** 属性日志时间(LogTime) */
private Date logTime;
/** 属性应用系统(AppName) */
private String appName;
/**属性交易码(TRANSRNO)*/
private String transrNo;
/** 属性日志描述(Content) */
private String content;
/** 属性备注(Remark) */
@Indexed
private String remark;
/** 日志级别*/
private String logGrade;
public MonitorLog(String serialNo,String userName,String ipadd,
Date logTime,String appName,String transNo,String content,String remark,String logGrade){
this.appName =appName;
this.content = content;
this.ipadd = ipadd;
this.logGrade = logGrade;
this.logTime = logTime;
this.remark = remark;
this.transrNo = transNo;
this.userName = userName;
}
/**
* 类Gemonitorbusinesslog的默认构造方法
*/
public MonitorLog() {
this.logTime = new Date();
}
/**
* 属性序列号(SerialNo)的getter方法
*/
public String getSerialNo() {
return this.serialNo;
}
/**
* 属性序列号(SerialNo)的setter方法
*/
public void setSerialNo(String serialNo) {
this.serialNo = serialNo;
}
/**
* 属性用户名(UserName)的getter方法
*/
public String getUserName() {
return this.userName;
}
/**
* 属性用户名(UserName)的setter方法
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 属性IP地址(IPADD)的getter方法
*/
public String getIpadd() {
return this.ipadd;
}
/**
* 属性IP地址(IPADD)的setter方法
*/
public void setIpadd(String ipadd) {
this.ipadd = ipadd;
}
/**
* 属性日志时间(LogTime)的getter方法
*/
public Date getLogTime() {
return this.logTime;
}
/**
* 属性日志时间(LogTime)的setter方法
*/
public void setLogTime(Date logTime) {
this.logTime = logTime;
}
/**
* 属性应用系统(AppName)的getter方法
*/
public String getAppName() {
return this.appName;
}
/**
* 属性应用系统(AppName)的setter方法
*/
public void setAppName(String appName) {
this.appName = appName;
}
/**
* 属性交易码(TRANSRNO)的getter方法
*/
public String getTransrNo() {
return transrNo;
}
/**
* 属性交易码(TRANSRNO)的setter方法
*/
public void setTransrNo(String transrNo) {
this.transrNo = transrNo;
}
/**
* 属性日志描述(Content)的getter方法
*/
public String getContent() {
return this.content;
}
/**
* 属性日志描述(Content)的setter方法
*/
public void setContent(String content) {
this.content = content;
}
/**
* 属性备注(Remark)的getter方法
*/
public String getRemark() {
return this.remark;
}
/**
* 属性备注(Remark)的setter方法
*/
public void setRemark(String remark) {
this.remark = remark;
}
public String getLogGrade() {
return logGrade;
}
public void setLogGrade(String logGrade) {
this.logGrade = logGrade;
}
@Override
public String toString() {
return "MonitorBusinessLog [serialNo=" + serialNo + ", userName="
+ userName + ", ipadd=" + ipadd + ", logTime=" + logTime
+ ", appName=" + appName + ", transrNo=" + transrNo
+ ", content=" + content + ", remark=" + remark + ", logGrade="
+ logGrade + "]";
}
}
未定义实现类 只是定义了一下接口
测试用例
package com.sinosoft.ebusiness.basic;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.sinosoft.ebusiness.basic.model.MonitorBusinessLog;
import com.sinosoft.ebusiness.mongo.basic.MonitorRepository;
import com.sinosoft.ebusiness.mongo.model.MonitorLog;
import com.sinosoft.ebusiness.mongo.service.face.MonitorBasicService;
public class TestServer {
public static void main(String[] args) {
String[] configFiles = { "classpath*:spring/applicationContext-web.xml",
"classpath*:spring/applicationContext-mongo.xml",
"classpath*:spring/applicationContext-basic.xml",
"classpath*:spring/applicationContext-jms.xml",
"classpath*:spring/applicationContext-hibernate.xml"
};
ConfigurableApplicationContext appContext;
appContext = new FileSystemXmlApplicationContext(configFiles);
final SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");
//MonitorBasicService ud = (MonitorBasicService) appContext.getBean("monitorBasicService");
MonitorRepository monitorRepository = (MonitorRepository) appContext.getBean("monitorRepository");
//MongoTemplate mongo = (MongoTemplate) appContext.getBean("mongoTemplate");
long s = System.currentTimeMillis();
System.err.println(monitorRepository.findAll().size()+"============monitorRepository.count()");
System.out.println("毫秒:"+(System.currentTimeMillis() - s));
}
}
单纯利用spring-data MongoRepository 接口 实现文件的查找存储
具体实现类可以在百度一下。我这里只是做了一个简单书写记录
具体技术资料可以查看一下 spring-data技术文档