Springboot&服务器:常见错误及解决方案
1、Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection
原因
MySQL8要求必须设置时区
解决
在.properties配置文件中的数据库URL中,加上时区,构成如下格式:
jdbc:mysql://主机名:3306/数据库名?serverTimezone=UTC
2、JPS INCREMENTAL ANNOTATION PROCESSING IS DISABLED
解决
把lombok的版本由1.16.12改为1.16.20
3、Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment
原因
JDK版本太高了,降低JDK版本即可
解决
解决报错Unable to make field private-程序员宝宝
或参考问题5的解决方案
4、部署到服务器后,访问页面出现Error resolving template [], template might not exist or……
解决
把controller类中return的网页最前的斜杠'/'删除,像下边这样,修改前是return "/index",修改后是return "index"
修改前
修改后
但是重定向还是要加上斜杠/:
5、Exception in thread “main“ java.lang.UnsupportedClassVersionError
原因
根本原因:用高版本JDK编译的程序,运行在了低版本的JVM上。
解决方法
①先检查当前计算机中的Java版本,看看二者是否一致:
如果一致,则可以确认是编译器原因,因为编译器在编译时使用的自带javac,而非系统javac;
②修改编译器所用jdk(以IDEA为例)
IDEA在项目编译时,有4个地方涉及到了JDK,如果不知道修改哪个,可以都试试:
1)Edit Configuration → 修改Build and run中的JDK版本
2)File → Project Structure → Project → SDK
3.1)File → Project Structure → Module → Sources → Language Level
3.2)File → Project Structure → Module → Dependencies → Module SDK
4)pom.xml文件中,用如下代码标注jdk版本
<properties> <java.version>1.8</java.version> </properties>
后续
1)如果还没有解决,请检查main方法所在的java类,是否忘记了注解@EnableAutoConfiguration
2)如何查看IDEA自带的jdk版本?
Project Structure → SDKs
6、Error:java: 警告: 源发行版 X 需要目标发行版 X
原因
发行版本的JDK与源版本JDK版本不一致
解决
源版本的设置:File → Project Structure → Sources → Language Level
File → Project Structure → Dependencies → Module SDK
目标版本的设置:File → Setting → Build,Execution,Deplyment → Compiler → Java Compiler → Targer bytecode version
也可以直接从如下入口进入
后续
如果以上设置好了还是不行,就需要去pom.xml文件中,看看是不是忘记了设置java版本,如下:
<properties> <java.version>1.8</java.version> </properties>
记得要和jdk版本匹配,或者删除不用,因为这配置也只是建议项,不是必须设置的。
7、java: 无效的目标发行版: 11
原因
发行版本为jdk11,但是编译时却采用了更低版本的jdk(比如jdk8),导致无法使用更高版本的功能
解决
问题本质和问题5一样,可以去看问题5的解决方法
8、has been compiled by a more recent version of the Java Runtime (class file version 56.0),this version of the Java Runtime only recognizes class file versions up to 52.0
原因
当前JDK为52.0,而编译JDK为56.0,这里的数字与JDK版本的对应关系为:
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
解决
问题本质和问题5一样,可以去看问题5的解决方法
8、数据库与mapper.xml
8.1、Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘name‘ in ‘field'
原因
mapper.xml文件中的问题,极大可能是SQL语句的问题
解决
请检查SQL语句中的查询列名是否与数据库中的列名一致,通常发生在用了不同数据库但没改SQL语句的情况下(比如用了某个服务器上的数据库,但是SQL语句还是针对本机数据库)。
8.2、Error creating bean with name ‘userController‘: Unsatisfied dependency expressed through field ...
解决(以下是若干个解决方法,并不是1个解决方法的若干个步骤)
1)请检查properties文件,对于mybatis的设置是否正确,比如复制了别人的代码却忘记修改了mybatis对应的mapper文件的路径
2)如果是yml文件,请检查格式是否正确,比如必须的缩进以及空格
3)检查mapper文件,是否映射了错误的Dao和Bean:
4)是否修改了数据库名(或者连接了别的数据库)而导致mapper中的列名与数据库中的列名不一致?
5)看看错误信息的最后一句话,如果出现No enum constant org.apache.ibatis.type.JdbcType.XXX,说明是resultMap中的数据库类型的问题,比如该大写的没大写(类型必须全大写,比如DOUBLE而非Double),或者用了没有的类型比如DATETIME
参考:https://blog.csdn.net/m0_52388979/article/details/125720053
经常出错的类型:BOOL、DATETIME,这两个类型是SQL中没有的,其中BOOL类型正确写法是BIT,DATETIME类型正确类型是DATE
关于JDBC Type和Java Type的关系:
6)忘记写注解
Service层需要注解@Service(写于Service实现类前)
Controller层需要注解@Controller或者@RestController
8.3、文档根元素 "mapper" 必须匹配 DOCTYPE 根 "null"
解决方法
mapper文件头加上如下内容:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
完整
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.mapper.TestMapper"> <insert id="test" useGeneratedKeys="true"> xxx </insert> </mapper>
8.4、Invalid bound statement (not found)
解决(以下是4个解决方法,并不是1个解决方法的4个步骤)
1)检查properties或yml文件,是否mapper的路径出错:
mybatis.typeAliasesPackage: com.example.electronic.dao
mybatis.mapperLocations: classpath:mapper/*.xml
2)检查mapper文件,是否映射了错误的Dao和Bean
3)mapper.xml中的方法,是否在Dao中声明了,是否使用了错误的或者不存在的方法
4)UserDao中某方法返回的是一个类对象,但是mapper中却没有正确地配置ResultMap(比如ResultMap映射了一个不存在的类)
<resultMap id="BaseResultMap" type="com.example.electronic.bean.User"> <id column="id" property="id" jdbcType="INTEGER"/> <result column="username" property="username" jdbcType="VARCHAR"/> ... </resultMap> <select id="findUserById" resultMap="BaseResultMap"> select * from user u where u.id=#{id} </select>
8.5、Data truncation: Incorrect time value: '2022-07-18' for column 'DT' at row 1
可能的错误原因
1)Mapper中的数据类型与数据库中的数据类型不匹配,比如mapper中该列是DATE,而数据库中的类型是TIME;
2)Mapper与数据库中的对应列的类型匹配了,但是传入的数据格式不对,比如需要的是时间TIME类型(类似"06:00:00"),但却传入了日期DATE类型(“类似2022-07-17”)。
9、java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x7f85739c) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x7f85739c
原因
lombok版本过低
解决
在pom.xml中升级lombok的版本至1.18.20
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency>
9.1、java: 找不到符号 符号: 变量 log
原因
lombok版本过低
解决
在pom.xml中将lombok升级至1.18.20版本
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency>
10、ssm错误 DependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService';
原因
忘记写Service层的注解
解决
Service层需要注解@Service(写于Service实现类前)
Controller层需要注解@Controller或者@RestController
13、Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPointerException
解决
在.properties或yml文件中,添加如下配置:
//.yml中的写法
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
//.properties中的写法
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
如果以上方法没解决,可以修改springboot的版本:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.7</version> <relativePath/> <!-- lookup parent from repository --> </parent>
14、Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.itranswarp.learnjava.service.MailService.sendLoginMail(com.itranswarp.learnjava.service.User)" because "this.mailService" is null
需要注入的实例前,需要加@Autowired注解
public class UserService { @Autowired private MailService mailService; ... }
15、Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.itranswarp.learnjava.service.UserService' available
Bean类需要添加@Component注解,表明这是一个Bean。
@Component public class UserService { ... }
16、java.sql.SQLException: null, message from server: "Host 'xxx.xx.xx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
原因
同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞(类似冻结)
解决(按对本问题的解决的贡献度从高到低排序)
在服务器端,使用指令mysql进入mysql中,输入指令 flush hosts;
17、com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
renrenFast 启动时 数据库连接不上,循环报错 om.mysql.cj.jdbc.exceptions.CommunicationsException: Communications l_wx60e3bc68c2152的技术博客_51CTO博客
解决
在数据库URL中加入useSSL=false,如果前边已经有了别的参数,需要用&连接:
url: jdbc:mysql://192.168.85.128:3306/guli_admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
18、服务器上安装MySQL时报错No match for argument: mysql-community-server Error: Unable to find a match: mysql-community-server
解决
先运行 yum module disable mysql
再尝试 yum install mysql-community-server 命令即可
19、Caused by: org.xml.sax.SAXParseException: 元素类型 “insert“ 必须后跟属性规范 “>“ 或 “/>“
错因:检查mapper.xml中,应该会有标红的地方
20、Error querying database. Cause:org.springframework.jdbc.CannotGetJdbcConnectionException:
请检查properties配置文件中的信息,比如url、用户名、密码是否写错
21、You have an error in your SQL syntax; check the manual that corresponds to y
可能错因:
1)Delete语句不能给表起别名;
2)不能用SQL关键字作为SQL列名
其他原因:
数据库工作笔记005---You have an error in your SQL syntax; check the manual that corresponds to y
22、Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway.
解决方法:
一般是依赖文件pom.xml出问题了,进去之后看一看有无标红的地方:如果没有,就要Reload一下Maven:
如果有,就去修改标红的地方,再次Reload,并重新打包即可。
23、Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found
参考自:Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found - 复一日 - 博客园
克隆别人代码出现Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found
解决方式,添加版本号重新导入
24、Resolver error at paths./datainfo/insert.post.parameters.0.schema.$ref Could not resolve reference because of: Could not resolve pointer: /definitions/DOUBLE does not exist in document
原因
使用Swagger的@ApiImplicitParam注解时,name属性必须与方法参数名相同,也就是说我们不能像下边这样把testdata参数给分解为t_id+B1+A+...这种组合类型
解决
修改为对参数testdata的说明,同时删去出错的ApiImplicitParam项
public Long insert(@RequestBody @ApiParam(name="testdata",value="testdata")TestData testData) throws Exception
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2021-07-11 Qt:QDir
2021-07-11 Qt:QCoreApplication
2021-07-11 Qt:QDateTime