zoukankan      html  css  js  c++  java
  • 平安产险项目记录(二)

    其实添加接口返回数据压缩还不是增加的第一个功能。因为第一个接口是不需要查数据库的,所以一开始只考虑了缓存问题,没有考虑数据库连接问题。
    做缓存的时候,因为时间长任务少,就自己从头开始做了一个轻量的缓存系统。这个缓存系统具有缓存数据和超时被动清除数据的功能,不用主动清除是因为被动清除可以不用设置定时器,能减少 cpu 消耗。现在想想是有些问题的,如果一直没有清除缓存,那么不是要一直生存到应用关闭了?所以还是需要弄一个时间跨度大一点的定时任务来清掉过期缓存的。
    做了这个之后,很快遇到了需要连接 mongodb 的情况。依旧是使用 mongoose。 但是这里就出现了状况,框架核心文件中没有考虑连接数据库的情况,另外也不能什么数据库都写一个连接方法吧。还好 mongoose 是支持在连接之后开始查询的,连接上数据库之前的查询是可以等待的,所以还按之前的把数据库连接写在单独的 model 文件中也还是可以的。
    但是后来又遇到了新的需求,我们不能再把数据库账号密码明文写在配置文件中了,需要从集团内部的其它系统中获取。经过对 java 示例代码和文档的研究,我发现这其实就是向那个系统发送一个 http 请求,然后那个系统返回给我们加密过的账号和密码。加解密这个在做香港C端项目的时候就已经搞过一遍了,不是问题。但是要先发请求拿数据库账号密码,就不能像之前一样连接数据库了,因为需要确认数据库账号密码拿到了,才能开始连接。于是就把入口文件的代码用 (async function() {})() 包起来,改成了一个同步的自执行函数,又在最开头加上获取账号密码的方法,解决了这个问题。
    如果只有这一个需要再 app 正常执行前执行的方法,后面也就没啥问题了。然而问题从来没有全部解决的时候,在这之后,又出现了需要启动完成之后开始同步数据的需求,以及获取开放平台的 access_token 的需求。正巧这时候我看了一段时间的 egg 的生命周期的文档,于是就尝试着把生命周期的概念引入到了我们的框架中。首先开始不搞特别复杂的,我就弄一个 beforeStart 和一个 afterStart 好了。于是重新梳理了核心框架代码,把 app 的启动封装起来,改造成 async 函数,这样就能在里面插入同步方法了。然后给 app 加上 beforeStart 和 afterStart 的 api, 在框架内部添加上串行执行任务的步骤,就简单完成了添加生命周期控制的方案,之后对于 app 启动前后要做的动作就能在代码中更清晰的体现了。
    在这之后还有一个大的功能点就是在通过平安开放平台连接员工账号密码登录服务的时候,很多接口就需要做未登录用户拦截了,于是就在路由功能上从之前的只能每个接口对应一个 controller 改成了可以对应一组 controller 了。现在想想登录校验功能也未必需要放在 controller 里面,放在 service 里面也可以,但是这样的话好像不仅不符合用 controller 来控制流程的思想,而且还是每个 controller 都需要再调用一次 service,相当于登录校验和正常功能耦合在一起,没有做分离,如果后面要改成不需要登录或者要改变登录逻辑,那就需要修改每一个 controller ,那样就很尴尬了。反之,如果在一个 controller 里面单独做登录校验,那么修改登录逻辑就很方便了。
  • 相关阅读:
    jar包和war包的介绍和区别
    Oracle中rownum的基本用法
    深入理解JVM—JVM内存模型
    Oracle数据库中序列(SEQUENCE)的用法详解
    jvm主内存与工作内存
    jvm虚拟机
    java 冒泡排序
    java二分查找
    java中split()特殊符号"." "|" "*" "" "]"
    java map的实现原理
  • 原文地址:https://www.cnblogs.com/lswit/p/10238789.html
Copyright © 2011-2022 走看看