20181031-Java项目发布注意事项及遇到的问题
发布前需要检查的内容
是否需要添加数据库账号
是否需要申请IP白名单
包括其他部门的接口、我们自己的内部服务(比如发邮件)
是否需要用到Redis
如果需要的话,要进行数据评估,将当前需要的容量、今后可能增长的容量,都评估好发给运维
接口的性能测试
是否需要Nginx服务器进行代理
如果需要将docker中的java程序转到poi域名下,请附上相应的配置
是否需要添加定时任务
是否需要自行一次性脚本
发布过程中遇到的问题
发给运维的数据库语句没有验证过,执行报错
比如下面这个赋权的SQL:
1 | |
里面的星号两侧加了`符号,会导致执行报错。这个开发人员在测试环境执行一次就能发现的。
漏加了正式环境的配置,导致线上无法使用
比如支付商城回调接口,加了ip白名单,但是只添加了测试和开发环境的ip白名单,没有加正式服务器的,这样上线后该功能无法使用。
还有圈子的fid也配错了。
Dockerfile中未限制程序的最大堆内存
忘记添加如下参数了:
1 | |
定时任务没有限制单机执行
两个docker都把定时任务跑起来了
程序存在BUG
日期解析错误
比如解析配置文件里面的日期时,配置的日期是yyyy-MM-dd格式,但是解析程序写成了针对yyyyMMdd格式解析,本来是准备更新2018-10-01至今的数据,结果程序从2017年就开始跑了。
这个因为正式环境和开发、测试环境的逻辑不一样,而正式环境没有在上线前进行模拟,结果没发现。其实我们只需要上线前,先模拟正式环境跑一遍程序,就能发现这个问题了。
解析接口返回结果时不够严谨,出现空指针异常
请求行情接口,有的时候会缺少某一个数据,程序没有对此进行判断,结果抛异常了。
邮件预警频率过高
发了1000+邮件过来
为了测试加入的硬编码未清理
有的地方写死了userid,没删掉。
不合理的任务执行机制
在程序起来的时候,就去跑了一次历史数据;这个是一次性操作,没有必要每次程序起来都跑。
docker的host添加有误
线上环境加成了映射后的IP(172.x.x.x)
hostname没有和其他项目保持一致,比如redis的hostname应该为webredis1、webredis2、webredis3
Nginx中配置的upstream名称包含了下划线
比如配置成了poi_java_api,这种格式会被识别为一个不合法的域名,导致报错。
将错误的docker容器名发给了运维
本来是要发A项目的,结果误将B项目发给了运维,导致B项目被重启了。
没有用test-xxx账号提起发布申请
直接用了自己的账号,导致运维那边看不到发布申请。