当前位置: 代码迷 >> 综合 >> 记一次带项目的经历,太狗血
  详细解决方案

记一次带项目的经历,太狗血

热度:91   发布时间:2024-01-24 18:43:23.0

        2019年9月,非常幸运,有了接触带项目的经历,本人是新手,刚进新公司,小白一个,第一天,运维给我安装了一台新电脑,主机是很小的那种dell,比较精致,第一天,主要熟悉公司的环境,没人来搭理我,第二天,听取领导安排,直接让我去客户现场,我想说,领导是有多大的勇气来让我这个新手,刚来公司第二天就让我去和客户谈项目,还带项目的,这样做合适吗?天上飞过一万个为什么。。。

         和客户谈完需求后,就进行了紧张的开发,碰到了十月一,领导安排我们十月一早来几天加班干活,说是后面给我们多放几天假,我相信了,看来领导很重视我们这个项目啊,心里想着,十月一加班不是三倍工资吗?但是计划赶不上变化,十月一后,还是无休止的加班,这个项目客户只给了半个多月的时间,就4个人,这怎么可能。领导,你太高看我们了。

         皇天不负有心人,最终我们的项目做完了,给客户上线了,后面就是一次次的修改页面功能,和领导诉苦,说这客户太善变了,领导说,平常心对待,习惯就好,好吧,我忍了。

         后面给用户正式使用的过程中,由于系统是全国的省市县乡都在用,出现了系统拥堵的现象,还有测试做使用手册出现了失误,最后客户把电话打到领导那了,领导直接就是一顿臭骂,我服了,有问题解决不就完事了,我也是新手,谁没有出错的时候,最后我和我们同事一起讨论,最终解决了这个问题,对大数据量大批量的插入数据库,使用队列的形式,减轻了数据库的压力。下面附上源码

static class TrackBusinessRunner extends Thread {private final Logger LOGGER = LoggerFactory.getLogger(TrackBusinessRunner.class);private LinkedBlockingQueue<TrackDataDTO> blockingQueue = new LinkedBlockingQueue<>(150000);//队列长度15万,非常推荐该队列(put和take好好用)private volatile boolean running = true;//开启一个线程private RuralInfoService ruralInfoService;public RuralInfoService getThreadTrackBusinessService() {return ruralInfoService;}private  TrackBusinessRunner(){}private static TrackBusinessRunner trackBusinessRunner;private static Object obj = new Object();//单例模式public static TrackBusinessRunner getInstance(){if(trackBusinessRunner==null){synchronized (obj) {if(trackBusinessRunner==null){trackBusinessRunner = new TrackBusinessRunner();}}}return trackBusinessRunner;}public void putQueueOnload(TrackDataDTO trackDataDTO){int i= 0;try {blockingQueue.put(trackDataDTO);//加入队列i = 0;} catch (InterruptedException e) {LOGGER.error("加入队列信息异常");e.printStackTrace();if(i < 2){putQueueOnload(trackDataDTO);i++;}}}@Overridepublic void run() {while (running) {try {TrackDataDTO trackDataDTO = blockingQueue.take();List<TRuralInfo> list= trackDataDTO.getList();List<String> repeatXzqhList=trackDataDTO.getRepeatXzqhList();int year=trackDataDTO.getYear();//分批处理,每次取200条BatchHandlerList<TRuralInfo> handler = new BatchHandlerList<TRuralInfo>(500,list) {@Overridepublic void handler(List<TRuralInfo> subList) {// TODO Auto-generated method stublong start=new Date().getTime();LOGGER.error("开始进行导入");
//                            System.out.println("开始进行导入");ruralInfoService.insertBatch(subList,repeatXzqhList,year);LOGGER.error("导入成功,耗时"+(new Date().getTime()-start)+"ms");//休眠
//                            try {
//                                Thread.sleep(5000);
//                            } catch (InterruptedException e) {
//                                LOGGER.error("batch track handler thread interrupt excption",e);
//                            }//5秒}};handler.handlerList();} catch (Exception e) {LOGGER.error("获取队列信息异常",e);e.printStackTrace();}//取数据,没有的话会等待}}public void setThreadTrackBusinessService(RuralInfoService ruralInfoService) {this.ruralInfoService = ruralInfoService;}}

 

 

        以上是我使用队列的形式彻底解决了系统拥堵的问题,记录一下,让自己后面每次看到这个文章,都会记起这段第一次肃然起敬的带项目的经历。

        完毕------------------

  相关解决方案