文档章节

关于download项目的一点总结

LeoXu1990
 LeoXu1990
发布于 2016/12/05 17:52
字数 724
阅读 10
收藏 0

背景

    网站有很多table提供download all的功能,简单来说就是能将table的全部数据以CSV的文件形式发送到客户的注册邮箱。动辄几千万的数据量注定这个功能不适合在前台Tomcat中完成,所以才有一个单独的项目负责处理客户的请求,以队列形式完成客户请求。

    这个功能之前和后台的项目是整合在一起的, 主要做法是把前台的DAO等逻辑复制到后台,通过读取客户提交的参数模拟和前台一样的查询,最后的出结果发送给客户。

存在的问题

    前台的代码会经常改动,如果前台改了代码后台就要同步改动。相当于一个功能的修改需要在前后台同步修改2次,非常的低效,而且copy代码让人抓狂。如果一个功能前后台长期不同步(各种原因)那么如果要同步一次那将是毁天灭地的体验。

解决方案

  1. 将前台的项目改为Maven管理,利用Maven的多模块化将DAO抽离一个单独项目,新建的download项目引入DAO的依赖,这样可以一劳永逸。前台修改以后新的项目只需要compile就可以,很方便。
  2. 将前台项目copy一份,将用户的参数保存然后传入自建的request,直接调用controller层。最后获得controller返回的response。这不是HTTP请求,只是一个简单的方法调用。但是controller层并不知道这不是HTTP请求。以后每个周只要merge和前台不同的代码即可。

抉择

    最终确定方案2,前台是一个7年老项目,没有用Maven,改成Maven然后抽离DAO风险和工作量太大。

第二个方案前期工作量大,但是也是一劳永逸。

踩坑

    Web项目改成Java项目需要修改很多配置

  1. Hibernate配置的数据库连接池要继续保留,但是connection的数量要缩小。因为不是web项目不需要这么多connection。
  2. 其他的JDBC的Driver最好用dbcp或者mybits等等
  3. 采用注解导入DAO的时候一定要注意不要出现启动死循环。如果在扫描一个package的同时这个package中出现SpringBeanFactory的getBean的话,就会出现扫描--》loadXML--》扫描 的死循环
  4. Couldn't get connection because we are at maximum connection count (30/30),这个错误是因为Hibernate的管理链接池的释放标准问题.之前WEB项目是自动释放链接.转换为JAVA项目因为链接数量需求很大,所以要把Hibernate配置的中的链接管理改为事务结束立即释放.<prop key="hibernate.connection.release_mode">after_transaction</prop>

© 著作权归作者所有

共有 人打赏支持
LeoXu1990
粉丝 0
博文 17
码字总数 9038
作品 0
青岛
后端工程师
nginx同胞兄弟tengine

前言 简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤。 简介与安装 Tengine是淘宝发起的web服务器项目,简单的讲就是对nginx进行了二次开发并提供了更丰富的功能,官网地址:htt...

李伟铭k
07/09
0
0
转载-查看mysql语句运行时间的2种方法

网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的。平时做项目的时候,我也会注意sql语句的书写,写出一些高效的...

筱飞
2016/04/28
10
0
PhpStorm中如何配置SVN,详细操作方法

1.简介: PhpStorm是一个轻量级且便捷的PHP IDE,其提供的智能代码补全,快速导航以及即时错误检查等功能大大提高了编码效率。它是一款商业的 PHP 集成开发工具,以其独特的开发便利性,短时...

slagga
2016/08/31
358
0
Unity调用Android的Activity

之前http://shuxiayeshou.blog.51cto.com/4452347/1932216 写了关于Unity与Android结合所遇到的问题及解决方法 总结一下,Unity做一个简单的场景,AndroidStudio建一个简单的项目,其中MainA...

lreach
2017/06/05
0
0
从开发到发布一款基于Vue2x的图片预览插件

先来看下Demo LiveDemo 关于开发Vue插件的几种方式 (具体请移步官网)Vue官网 我采用第一种方式来编写这个插件 1.第一步创建项目 vue init webpack-simple youProjectName(你的项目名称)具体...

JoySang
05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据之Linux早课9.13

1.如何判断一个Linux上的xxx服务是否存活? 2.端口号哪个命令去看看通不通? 3.那么Linux和window系统想想,都会安装telnet吗? 4.查看Linux的ip哪些途径? 5.那么对应的window的IP查看命令是什么...

hnairdb
2分钟前
0
0
http请求之 RestTemplate接口请求 总结

最近做自动化测试,使用RestTemplate调用接口,碰到了各种场景下,如: 1、灵活指定调用方式 1、什么都不带的 2、带cookie、header、其他参数的 3、需要获取返回状态码的等等,先在这稍微总结...

onedotdot
4分钟前
0
0
禁用login.salesforce.com 登录系统

在MyDomain==>设置

在山的那边
4分钟前
0
0
Nginx负载、权重、最大失败次数及时间

upstream tomcat_server_pool { ip_hash;server localhost:8082 weight=4 max_fails=2 fail_timeout=5s;server localhost:8081 weight=4 max_fails=2 fail_timeout=5s; ......

lyle_luo
13分钟前
0
0
今日学习目标

今日学习目标 : 能够说出File对象的创建方式 能够说出File类获取名称的方法名称 能够说出File类获取文件大小的方法名称 能够说出File类判断是否是文件的方法名称 能够说出File类判断是否是文...

码农屌丝
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部