Exception集中营

本文将一直出于被编辑状态,用来存放工作中遇到的各种异常,并将说明产生异常的原因。


1.ConcurrentModificationException


分析:修改collection对象时,迭代器正在遍历集合。此异常带有不确定性。


方法:用synchronized同步对象确保迭代发生时数据不会被其他读取并修改。



2.Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


分析:这是来自JDBC的一条异常。显示未安装驱动。


方法:检查是否导入驱动包“mysql-connector-java-5.1.24-bin.jar”。检查类名是否正确。

Assert.notNull(query.getStartDate(), "40000"); Assert.notNull(query.getEndDate(), "40000"); ExportStartsEnum byExportKey = ExportStartsEnum.getByExportKey(query.getExportKey()); if (byExportKey == null) { AssertUtil.isTrue(false, "40000"); } List<List<Object>> dataList = new ArrayList<>(); StatsQuery statsQuery = new StatsQuery(); statsQuery.setStartDate(query.getStartDate()); statsQuery.setEndDate(query.getEndDate()); RetentionRateQuery retentionRateQuery = new RetentionRateQuery(); BeanUtils.copyProperties(query, retentionRateQuery); List<String> headers = byExportKey.getHeaders(); switch (query.getExportKey()) { case "user": //用户量分析 dataList = operationDataService.exportUserAnalyseData(statsQuery); break; case "revenue": //营收 dataList = operationDataService.exportRevenueAnalyseData(retentionRateQuery); break; case "retention": //留存率 Assert.notNull(query.getDays(), "40000"); ResultVo<List<RetentionRateVo>> result = operationDataService.getRetentionRate(retentionRateQuery); if (result.getData() != null && !result.getData().isEmpty()) { // 构建表头 headers.add("留存日"); result.getData().forEach(retentionRate -> { headers.add(retentionRate.getDay().equals("2") ? "次日留存率" : retentionRate.getDay() + "日留存率"); }); // 构建“留存率”行 if (!result.getData().isEmpty() && result.getData().get(0).getData() != null) { List<Object> retentionRow; for (ChartDataVo chartData : result.getData().get(0).getData()) { retentionRow = new ArrayList<>(); retentionRow.add(chartData.getKey()); for (RetentionRateVo retentionRate : result.getData()) { retentionRow.add(retentionRate.getData().stream() .filter(cd -> cd.getKey().equals(chartData.getKey())) .map(ChartDataVo::getValue) .findFirst() .orElse(0)); } dataList.add(retentionRow); } } break; } case "gameStartCount": //游戏启动次数 dataList = gameDataService.exportStartCountAnalyseData(statsQuery); break; case "gameAvgPlayTime": //游戏平均时长 dataList = gameDataService.exportAvgPlayTimeAnalyseData(statsQuery); break; case "gameTotalPlayTime": //游戏总时长 dataList = gameDataService.exportPlayTimeAnalyseData(statsQuery); break; case "pvuv": //PV UV dataList = gamePlatformService.exportPageVisitStatsData(statsQuery); break; case "accessConversionRate": //访问转化率 dataList = gamePlatformService.exportAccessConversionRateStatsData(statsQuery); break; case "registrationConversionRate": //注册转化率 dataList = gamePlatformService.exportRegistrationConversionRateStatsData(statsQuery); break; case "taskMetrics": //任务指标 dataList = gameTaskService.exportTaskStatsData(statsQuery); break; case "invitationMetrics": //邀请指标 dataList = gameTaskService.exportInviteConversionStatsData(statsQuery); break; case "loginRewardMetrics": //登录奖励指标 dataList = gameTaskService.exportInviteConversionStatsData(statsQuery); break; } try { // 导出Excel ExcelExportUtil.exportExcel(response, byExportKey.getExportFileName(), byExportKey.getExportSheetName(), headers, dataList); } catch (Exception e) { log.error("导出数据失败", e); throw new IOException("导出失败: " + e.getMessage()); } 优化代码
10-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值