需求:该表记录的是双方交互发生的报文详情,一般用于追溯问题。因此,需求是保存60天的数据即可,即:在项目启动时执行删除该表60天前的数据。更好的方式是以自动任务的方式配置在每天的晚上十点执行,不影响项目的启动。
以下代码是使用@PostConstruct在项目启动时执行删除该表数据的操作,存在一些问题:
该表数据很大,且条件字段没有添加索引。直接执行删除操作,占用大量文件空间资源,轻则启动耗时很长(本次上线启动耗时超过20分钟),重则资源耗尽导致重启失败。由于投产过程十分严格,不让手动使用数据库连接工具执行删除表数据操作,也不让修改投产的代码,除非紧急走邮件审批,所以非常麻烦,差点要回滚原来备份程序,重新投产。因此更换jar包后能否正常重启也是投产是否成功的标志之一,向这种重启耗时过久的现象实在是捏了一把大汗。需要优化这段代码
改进后(使用多线程方式)
可以在 cleanInterfacePaymentHistory方法中模拟耗时操作,验证睡眠时间内,服务是否启动成功,还是说等待睡眠时间过后才启动成功
优化点2:还需要在INTERFACE_PAYMENT_HISTORY为字段REQ_DATETIME添加索引
CREATE INDEX IDX_REQ_DATETIME ON CUSTOMER.INTERFACE_PAYMENT_HISTORY (REQ_DATETIME);