关于go:海量数据高并发场景构建GoES8企业级搜索微服务无密分享

6次阅读

共计 4555 个字符,预计需要花费 12 分钟才能阅读完成。

download:海量数据高并发场景,构建 Go+ES8 企业级搜寻微服务无密分享

小微企业跨组织人才管理系统
介绍
因为后期比拟懒,把竞赛题的剖析交给了文的同学,导致剖析不到位,有点跑题。侥幸的是,这不是一个大问题。
后期打算用 ssm 做框架。两头阶段在一本书上发现了一个用 jsp 写的模板,就间接复制了。
前期为了减少 ajax、拦截器、文件上传下载性能,退出了 SpringMVC 架构。
因而,这四个不同点就产生了,用的是 SpringMVC 架构,而 JDBC…,
总而言之,我还是没教训,见机行事!

我的项目代码
上面将展现局部代码,源代码能够在这里下载,
1. 拦截机
它旨在通过间接输出地址来避免拜访和分级权限治理。后果没用,还是写了。…
公共类 LoginInterceptor 实现 HandlerInterceptor {

public boolean pre handle(http servlet request 申请、HttpServletResponse 响应、对象处理程序)引发 ServletException、IOException {
// 如果是登录页面,就公布。
system . out . println(” uri:”+request . getrequest uri());
if (request.getRequestURI()。蕴含 (“登录”){
返回 true
}

if (request.getRequestURI()。蕴含 (“验证”){
返回 true
}

http session session = request . getsession();

// 如果用户曾经登录,则开释它。
if(((String)session . get attribute(” validated “))。等于 (” ok”)) {
返回 true
}

返回 false
}
}
复制代码
2. 文件上传和下载
原本认为程序会依据以后员工的编号,主动更改上传文件的文件名,而后保留。这种状况下,浏览或下载文件也能够间接依据员工号作为文件名进行搜寻。然而,为了不便起见,这里没有体现。它只是一个失常的文件上传和下载性能。
文件上传
@ request mapping(“/ 郭城 ”)
公共字符串 fileUpload2(@RequestParam(“ 郭城 ”)CommonsMultipartFile 文件,HttpServletRequest 申请)抛出 IOException {

// 上传保留设置的门路
门路 = 申请;getservletcontext();get real path(“/work product “);
File realPath = 新文件 (门路);
如果(!realPath.exists()){
real path . mkdir();
}
// 上传文件地址
System.out.println(“ 上传文件的保留地址:”+realPath);

// 间接用 CommonsMultipartFile 的办法写文件(这次留神)
file.transferTo(新文件(real path+”/”+File . getoriginalfilename()));

Return “window.alert(‘ 上传胜利!’)” +
” history . back()”;
}
复制代码
下载文件
@ request mapping(value = “/download CG “)
公共字符串 downloads1(HttpServletResponse 响应,HttpServletRequest 申请)引发异样 {
// 要下载的图片的地址
门路 = 申请;getservletcontext();get real path(“/work product “);
String fileName = ” 1234567.pdf

//1. 设置响应头。
response . reset();// 设置不缓存页面,清空缓冲区
response . setcharacterencoding(” UTF-8 “);// 字符编码
response . set content type(” multipart/form-data “);// 二进制传输数据
// 设置响应头
response.setHeader(“ 内容 - 处理 ”,
“附件;fileName=”+ URLEncoder.encode(文件名,” UTF-8 “));

File file = 新文件(门路,文件名);
//2. 读取文件输出流
InputStream input = new file InputStream(file);
//3,写出文件输入流
output stream out = response . get output stream();

byte[]buff = 新字节 [1024];
int index = 0;
//4,执行写出操作。
while((index= input.read(buff))!= -1){
out.write(buff,0,index);
out . flush();
}
out . close();
input . close();
返回 null
}
复制代码
3. 增加、删除和查看
原本这里如果有 SSM 架构的话,数据库用 mybatis 写会更不便,然而用了模板,所以用了 JDBC,造成了很多代码冗余。这里只选取片段展现。这是用 jsp 写的代码块。

String BH =(String)session . get attribute(” zgbh “);
尝试{
class . forname(” com . MySQL . JDBC . driver “)。new instance();
string URL = ” JDBC:MySQL://localhost:3307/rsgl?use SSL = false & use unicode = true & character encoding = UTF-8 “;
String user = ” root
String password = ” 123456
connection conn = driver manager . getconnection(URL,user,password);
String sql = “select * from zgb,bmb,jlb,users” +
“ 其中 zgb.bm = bmb.bmbh 和 zgb.bh=jlb.zgbh 和 zgb.bh=users.username 和 bh=?”+
”由 bh 订购”;
string SQL 1 = ” insert into checkb(BH,xm,xb,bm,csrq,jbgz,gwjt,gwpj,jzjl,zwpj,password,usertype) ” +
“价值观(?,?,?,?,?,?,?,?,?,?,?,?)”;
string SQL 2 = ” delete from zgb where BH =?”;
string SQL 3 = ” delete from jlb where zgbh =?”;
String sql4 = “ 从用户名 = 的用户中删除?”;

prepared statement pstmt = conn . prepare statement(SQL);
pstmt.setString(1,BH);
ResultSet rs0 = pstmt . execute query();
SimpleDateFormat SDF = new SimpleDateFormat(” yyyy-MM-DD “);
rs0 . next();
String xm0 = rs0.getString(“xm “)。trim();
String xb0 = rs0.getString(“xb “)。trim();
String bm0 = rs0.getString(“bmmc “)。trim();
string csrq 0 = SDF . format(rs0 . getdate(” csrq “));
string jbgz 0 = string . value of(rs0 . get float(” jbgz “));
string gwjt 0 = string . value of(rs0 . get float(” gwjt “));
string jzjl 0 = rs0 . getstring(” jzjl “)。trim();
string gwpj 0 = rs0 . getstring(” gwpj “)。trim();
string zwpj 0 = rs0 . getstring(” zwpj “)。trim();
string pwd 0 = rs0 . getstring(” password “)。trim();
string type 0 = rs0 . getstring(” usertype “)。trim();
rs0 . close();

PS TMT = conn . prepare statement(SQL 1);
pstmt.setString(1,BH);
pstmt.setString(2,xm0);
pstmt.setString(3,xb0);
pstmt.setString(4,bm0);
pstmt.setString(5,csrq 0);
pstmt.setString(6,jbgz 0);
pstmt.setString(7,gwjt 0);
pstmt.setString(8,gwpj 0);
pstmt.setString(9,jzjl 0);
pstmt.setString(10,zwpj 0);
pstmt.setString(11,pwd 0);
pstmt.setString(12,type 0);
PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 2);
pstmt.setString(1,BH);
int n1 = PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 3);
pstmt.setString(1,BH);
int N2 = PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 4);
pstmt.setString(1,BH);
int n3 = PS TMT . execute update();
if (n1>0 && n2>0 && n3>0){
%>
Window.alert(‘ 胜利删除员工记录!’)
window . location = ” $ {pagecontext . request . context path}/HR/all list “

}否则{
%>
Window.alert(‘ 员工记录删除失败!’)
history.back()

}
pstmt . close();
conn . close();
} catch(异样 e){
out . print(e . tostring());
}
%>
复制代码
下面这段代码的次要作用是,当 HR 抉择删除一个员工时,首先将该员工的所有信息插入到一个 checkb 表中。此表中的员工全副被 HR 解雇,最终会呈现在领导的管理系统中。如果领导不批准解雇该员工,那么他的数据会被从新插入到所有的原始表中,也就是实现了复原该员工的性能,同时 checkb 表中该员工的记录也会被删除。如果领导批准解雇,间接放在 checkb。
之所以用三个 delete 语句,是因为一个 delete 语句删除三个表,总是给我一个谬误。为了不纠结这个问题,我把它们离开写了,总之,

摘要
不请自来的五人团队第一次加入服务外包翻新大赛。因为经验不足,咱们一路趔趔趄趄,但侥幸的是,咱们的团队来了,保持下来了。

因为常识储备有余,第一要务是实现我的项目,所以抉择了 A01 竞赛题。当我写完的时候,我意识到这有点简略,然而无伤大雅。

正文完
 0