该文章旨在记录开发中遇到的一些异常,以供遇到似错误进行参考修改
目录
该文章旨在记录开发中遇到的一些异常,以供遇到似错误进行参考修改
二、用新的IDEA导入项目文件,maven刷新后注解还是爆红
三、紧接第二个问题,清除缓存后注解爆红解决了,运行项目报错找不到启动类
四、本地调试Redis时,出现一直连不上服务器的情况,但是用管理工具可以连接
五、SpringBoot 项目引入 Jackson 依赖后,项目启动失败,信息如下
九、swagger 检测不到 @ApiModelProperty 标注的字段
一、项目在多个环境下切换,有一次启动后编译失败,报异常
背景:项目在不同环境下有对应的分支,切换分支后运行项目,报错如下
错误:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.1.16.
解决:点击“构建”>>“重建项目”,重建完成后,再次启动项目即可
二、用新的IDEA导入项目文件,maven刷新后注解还是爆红
背景:一直用的IDEA版本太低了,一些插件不兼容,安装了高版本然后导入项目,自动检测到maven之后,刷新,下载依赖,发现所有注解都爆红,maven clean,install 没有用
解决:清除缓存并重启,解决问题
三、紧接第二个问题,清除缓存后注解爆红解决了,运行项目报错找不到启动类
错误: 找不到或无法加载主类 com.xxx.xxx.xxxApplication
解决:项目右侧maven ,找到生命周期,重新执行 clean ->install ,完成后重试,问题解决
四、本地调试Redis时,出现一直连不上服务器的情况,但是用管理工具可以连接
背景:本地的Redis安装后,通过server.exe,cli.exe连接没有问题,Springboot项目引入依赖后测试,连接redis错误
出现如下错误
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis;
nested exception is org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool;
nested exception isio.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379
按照网上方案调试了好久,问题依然没有解决,偶然间看了下第一个错误提示后面的提示,好像是现在的配置是不需要密码的,但是我在配置文件里面加了密码(图中是改后的),再去看看redis.conf配置文件中果然没有要求密码
Caused by: io.lettuce.core.RedisCommandExecutionException: ERR Client sent AUTH, but no password is set
解决方案:去掉.properties文件中密码配置 ,重启redis服务即可
五、SpringBoot 项目引入 Jackson 依赖后,项目启动失败,信息如下
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'formContentFilter' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class]:
背景:引入多个Jackson 依赖的时候,项目启动失败
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<!-- <version>2.9.8</version>-->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<!-- <version>2.9.8</version>-->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<!-- <version>2.9.8</version>-->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<!-- <version>2.13.0</version> <!– 替换为与你的Spring Boot兼容的版本 –>-->
</dependency>
解决:网上找了相关文章,很少有错误解读,具体的处理方式就是引入的依赖去除版本号,使用父依赖中指定的即可,问题解决
六、项目一直正常启动,有一次开始报找不到 get 方法异常
:java找不到符号 符号: 方法 getValue()
背景:项目平时一直正常运行,偶然一次不知道改动了什么启动失败,提示找不到 get方法,项目构建失败
解决方案:在网上找了很多同类型的异常,大致原因可能是 lombok 的版本问题,本地选择使用命令的方式解决;具体的命令以及使用方式如下:打开settings设置 ...
-Djps.track.ap.dependencies=false
七、项目 Debug 启动时报错,非法指令
报错内容如下:
=============== DEBUG MESSAGE: unimplemented bytecode ================ # # A fatal error has been detected by the Java Runtime Environment: # # SIGILL (0x4) at pc=0x00000001046ab52c, pid=30582, tid=0x0000000000005a03 # # JRE version: Java(TM) SE Runtime Environment (8.0_391) (build 1.8.0_391-b13) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.391-b13 mixed mode bsd-aarch64 compressed oops)
背景:别的模块的项目正常启动调试,唯独该项目启动遇到该异常,并且项目调试启动时运行非常慢,最后会爆出该异常并且生成日志文件
解决方案:头次遇到这种问题,很头疼,因为不是代码的原因,只有一个底层指令的日志文件可供参考,在网上搜寻也有很多这种情况,但是没有找到具体的解决方案,大致调试了这几种方案:调整堆内存大小,上限调大;切换开发工具版本;切换jdk版本
本地解决: 没有具体方案,就是先切换 IDEA 版本,调试,切换 JDK 版本,调试,挨个试错;另外的话调试的时候注意项目中是否存在过多断点,debug 启动的时候可以屏蔽掉,说不定会出现奇迹!
八、Integer 超出上限后变负数
背景:
有一个地方需要将给定的时间戳加上指定天数,然后进行转换,问题发生在将天数转换为时间戳后,发现得到的时间戳比相加前要少了,伪代码如下:这里的天数是 Integer 类型的
给定时间戳 + 天数 * 24 * 60 * 60 * 1000
问题所在:通过一系列的操作,最后定位到 Integer 的上限问题, 这里传入的天数90,计算过后的结果远大于上线,在别的文章中找到问题,超出上线后会变为负数
解决方法: 调整数据结构,这里没有改变原有数据结构,在使用的地方显示转换为Long类型再使用的,根据业务需求,long类型的上限足够本地项目使用
给定时间戳 + Long.valueOf(天数)* 24 * 60 * 60 * 1000
九、swagger 检测不到 @ApiModelProperty 标注的字段
背景:有一个接口返回值新增了一个字段正式环境更新后(返回数据是 List,泛型是一个静态内部类,在静态内部类中新增了一个字段,正常页面显示的样例返回结果中应该显示这个字段),swagger页面却没有检测到该字段,但是接口调用返回的数据是存在字段的;这就导致前端同事查看接口文档时遇到问题
问题所在:经本地检查调整测试后发现,是因为别的类中有一个相同名称的静态内部类,而且该类与修改的类字段正好差新增的那个,发生了覆盖,导致最后页面上显示的是该类的属性
解决方案:修改其中一个静态内部类的名称,安全起见列表名称也修改
十、导入的maven项目 IDEA 自动检测不到
背景:一直在开发的项目,又开了一个新的模块,远程下载到本地之后,重新导入,Maven 识别不到,无法正常使用
问题所在:项目结构变化后,没有清除原有的 .idea 文件,每次导入时使用的就是老的 idea 配置文件,新导入的项目自动也不会处理
解决方案:找到项目的上一级目录,显示所有文件(包含隐藏文件),清除 .idea 文件,重新导入项目,如若还是不行,导入项目后,重新配置下项目结构,file->project Structure->检查下这里的配置
编辑好之后退出(会存在一个新的 .idea文件),重新删除 .idea 文件,然后导入项目右下角会有检测到 maven 配置的提示,点击 load 即可