Springboot&服务器:常见错误及解决方案

1、Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection

学习自:Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection_南淮北安的博客-CSDN博客

原因

MySQL8要求必须设置时区

解决

在.properties配置文件中的数据库URL中,加上时区,构成如下格式:

jdbc:mysql://主机名:3306/数据库名?serverTimezone=UTC

 

2、JPS INCREMENTAL ANNOTATION PROCESSING IS DISABLED

学习自:java: JPS incremental annotation processing is disabled. Compilation results on partial recompilatio_Final磊的博客-CSDN博客

解决

把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的最大值)中断的数据库连接而导致的阻塞(类似冻结)

解决(按对本问题的解决的贡献度从高到低排序)

问题解决java.sql.SQLException: null, message from server: “Host ‘xxx.xx.xx.xxx‘ is blocked because of | 码农家园

java.sql.SQLException: null, message from server: "Host 'xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'" - 仰望浩瀚星辰 - 博客园

(41条消息) java.sql.SQLException: null,message server: Host ora-rac2 is blocked because of many_讓丄帝愛伱的博客-CSDN博客

在服务器端,使用指令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

(41条消息) No match for argument: mysql-community-server Error: Unable to find a match: mysql-community-server_流浪的冬天的博客-CSDN博客

解决

先运行 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列名

其他原因:

Mysql运行sql文件错误You have an error in your SQL syntax; check the manual that corresponds to y_yetaodiao的博客-CSDN博客

数据库工作笔记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

 

posted @   ShineLe  阅读(4638)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2021-07-11 Qt:QDir
2021-07-11 Qt:QCoreApplication
2021-07-11 Qt:QDateTime
点击右上角即可分享
微信分享提示