不关注逻辑,单看下面调用链路中的 jobParameter 参数。
@Slf4j @DubboService public class CloudCaringYqfCertConsumeNoticeJobImpl implements CloudCaringYqfCertConsumeNoticeJob { @Autowired private YqfCertConsumeNoticeBizService yqfCertConsumeNoticeBizService; @Override @Async public void execute(String jobParameter) { log.info("平安移企服消费通知补偿-请求参数:{}", jobParameter); try { yqfCertConsumeNoticeBizService.yqfCertConsumeNoticeHandler(jobParameter); } catch (Exception e) { log.error("平安移企服消费通知补偿执行异常:", e); } } }
↑
来看其中调用的 YqfCertConsumeNoticeBizService#yqfCertConsumeNoticeHandler
↓
@Service @Slf4j public class YqfCertConsumeNoticeBizService { ... public void yqfCertConsumeNoticeHandler(String jobParameter){ List<YqfCertConsumeNotice> yqfCertConsumeNotices = yqfCertConsumeNoticeManager.listByDateAndProcessing(jobParameter); if(CollectionUtils.isEmpty(yqfCertConsumeNotices)){ return; } for(YqfCertConsumeNotice yqfCertConsumeNotice : yqfCertConsumeNotices) { consumeNoticeHandler(yqfCertConsumeNotice.getId()); } } public void consumeNoticeHandler(Long noticeId) { ... } }
↑
来看其中调用的 yqfCertConsumeNoticeManager#listByDateAndProcessing
↓
@Service public class YqfCertConsumeNoticeManager extends ServiceImpl<YqfCertConsumeNoticeMapper, YqfCertConsumeNotice> implements IService<YqfCertConsumeNotice> { public List<YqfCertConsumeNotice> listByDateAndProcessing(String jobParameter) { int offset = StringUtils.isBlank(jobParameter) ? -3 : Integer.parseInt(jobParameter); Date date = DateUtil.now(); Date startDate = DateUtil.offsetDay(date, offset); Date endDate = DateUtil.offsetMinute(date, -3); return list(new LambdaQueryWrapper<YqfCertConsumeNotice>() .eq(YqfCertConsumeNotice::getStatus, OperationStatusEnum.UN_OPERATION) .between(YqfCertConsumeNotice::getCreateTime, startDate, endDate)); } }
这个 jobParameter 参数,从定时任务入口程序 下传到 业务处理service类,再下传到 数据处理Manager类。
这有什么问题吗?
没问题,代码可运行,不会因为这个 参数一传到底,而存在bug。
老实讲,也不排除会存在潜在问题。 关于这种”程序入口参数一传到底“的编码风格,我来分享一个刺激的case,>>click here,来看看由这种编码风格引起的程序OOM 。
有问题。从编码层面来讲,是有问题!
程序内的service和Manager应该定义明确的参数。 以本案为例,它们关注 jobParameter 吗? 应该关注 jobParameter 吗?- - - - 不应该。
这段代码应该怎么重构?
添加评论