前言
最近,在工作上接手的任务中,各种 bug 问题出现,在解决的同时也可以记录一下。因此,觉得可以出个记录 bug 合集。方便后来者碰到类似情况,可以作为一个参考进行解决。
文章题目就包含当前文章内容中所遇到的三个 bug...
【BUG】
1. IllegalStateException: Duplicate key xxx
【问题】: 在新增写完一个接口,后面在测试时候,查询接口的时候,突然报错,“IllegalStateException: Duplicate key xxx”
【分析、发现与解决】
【分析、发现与解决】(点击展开)
【原因】: 使用 jdk8 的特性 stream 中的 Collectors.toMap()方法,有相同的 key 导致出现报错。
{
...
// 查询结果集合
List<UserEntity> userList = userService.selectList(entityWrapper);
// 处理数据
Map<String, String> userMap = userList.stream().collect(
Collectors.toMap(
UserEntity::getUserId,
UserEntity::getUserName
)
);
// 这里如果 userId 出现相同的,
// 就会报“IllegalStateException: Duplicate key xxx”错了。
...
}
【如何发现】: 项目在一直跑着中,数据突然出现报错的时候。
【如何修复】: 只要当出现重复的 key 时候,处理重复 key 的数据问题就好了。
{
...
// 查询结果集合
List<UserEntity> userList = userService.selectList(entityWrapper);
// 处理数据
Map<String, String> userMap = userList.stream().collect(
Collectors.toMap(
UserEntity::getUserId,
UserEntity::getUserName,
(entity1, entity2) -> entity1
)
);
// “(entity1, entity2) -> entity1” 这里的剪头函数,
// 就是当出现相同重复的 key 的数据时候,会调用,返回的是第一个的参数值,即entity1。
...
}
【总结】: 不够熟悉 “Collectors.toMap()” 的用法,菜还得多练。
2. idea 控制台乱码问题
【问题】: 组长安排一个老的项目来了解的时候,在启动过程中,发现控制台直接System.out.println输出的有中文的就乱码,log 打印出来的也乱码,还需要添加不同位置参数!
System.out.println()输出乱码
log 打印乱码
【分析、发现与解决】
【分析、发现与解决】(点击展开)
【原因】: 就是配置问题问题
【如何发现】: 启动项目,控制台输出日志的时候。
【如何修复】: 在两处设置中添加 -Dfile.encoding=UTF-8
修复 log 打印乱码( 点击 idea 顶部的 “help” ——》找到 “Edit Custom VM Options...” 点击 ——》在内容的底部加上“-Dfile.encoding=UTF-8” )
修复 控制台直接输出打印(即“System.out.println()”方法;点击在“启动按钮”旁边的下拉框——》找到“Edit Configurations...”——》找到“VM options:”,在输入框内添加-Dfile.encoding=UTF-8)
``
【总结】: 干就完了!细节!
3. idea 启动 tomcat jdk6 报错
【问题】: 组长安排一个老的项目来了解的时候,在启动过程中,发现报错了。“java: Cannot start javac process for xxx: it is configured to use JDK 6, but IDE supports compilation using JDK 7 and newer only. Consider associating the module with a supported JDK version. Note, that it is possible to keep the current Java language level to make produced *.class files compatible with Java 6 even when they are compiled by a newer compiler version.”
【分析、发现与解决】
【分析、发现与解决】(点击展开)
【原因】: 暂时猜测是,idea 配置的 tomact 启动项目,不支持 jdk1.6。(因为,在 idea 多出配置中已经都改成 jdk1.6 环境了,还是启动报错这个问题。idea 版本太新也导致不支持 jdk1.6 就起不来的问题)
【如何发现】: 项目启动时候,跑不起来。
【如何修复】: 要么换 idea 版本,要么换 jdk 版本;最终选择换 jdk1.8,项目没有用到 1.6 过时的类,因此能起来,正常跑起来了。
修改 tomcat 启动
修改 Project Structure
修改 Java Compiler
【总结】: 一开始以为是配置老没配好的问题,但是实际没有,是版本不支持,所以还是要了解清楚。
文章小尾巴
文章小尾巴(点击展开)
文章写作、模板、文章小尾巴可参考:《写作“小心思”》
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)