Springboot的报错集合(1)

  • Post author:
  • Post category:其他




1、MySQL未启动

报错,项目启动失败

2022-01-19 18:09:01.111 ERROR 10768 --- [  restartedMain] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

原因:

mysql没有启动,或者MySQL的配置问题。

我的解决方法:

net start mysql

仅限于电脑配置了MySQL环境,启动MySQL成功如下

启动成功的显示

重启spring boot项目,项目启动成功




2、Controller层的重复响应头

报错,项目启动失败

2022-01-19 20:07:27.684 ERROR 12012 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'usersController' method 
com.czx.controller.UsersController#addUser(User, RedirectAttributes)

我的报错原因:

重复的响应头,一个是返回json格式的响应头,一个是页面响应头,名字冲突

解决方法:

修改响应头

,重新启动,启动成功。




3、实体类的字段和数据库的字段不一致

报错,查询的时候出现如下错误

Unknown column 'seatId' in 'field list' ; bad SQL grammar []; nested exception

报错原因:

字段不一致,

seatId

对应数据库的

seat_id

,照常理应该是没问题的,但是偏偏有问题报错了

解决方法:

在实体类对应的字段加上注解

@TableField("seat_id")

,建议实体类上的所有字段都加上注解。




4、数据库链接出错

问题描述

从数据库读取到的Date数据和显示出来的Date的时间不一致

错误原因:

连接池的数据库时区错了或没写

解决方法:

在MySQL的数据库链接后加上

?serverTimezone=Hongkong


问题解决




5、mapper的xml配置文件的警告

错误原因:在mapper的xml配置文件手贱按了alt+enter键把警告给去掉,结果打包成jar包在服务器上运行出错,虽然在本地运行项目没问题,但是服务器上运行jar包有问题,能运行就好别去去掉无关紧要的警告

在这里插入图片描述

报错原因:配置了SQL方言(可能是这个原因)

解决方法:撤销自己的操作,或者重新新建一个项目,重写配置文件。


或者有其他解决方法的评论区告诉博主一下,这个真的好坑呐




6、访问某个页面失败,报错

 ERROR 3258 --- [nio-8989-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/topic/add], template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause

原因:云服务器访问的页面不需要加/,例如

/**
     * 去到主题添加页面
     *
     * @return 映射页面
     */
    @RequestMapping("/add.html")
    public String toAdd() {
    	//错误返回
        //return "/topic/add";
       //正确返回
       return "topic/add";
    }

返回的字符串不应该加/

成功解决




7、忘记添加mapper扫描

报错:

 No qualifying bean of type 'com.lmsdata.dao.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

原因:忘记在主启动类上添加扫描mapper包的注解。

解决方法:在主启动类上添加扫描mapper包的注解。

例如:

@MapperScan("com.lmsdata.dao")

成功解决




8、service层的循环引用

报错:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   categoryController
┌─────┐
|  categoryServiceImpl
↑     ↓
|  dishServiceImpl
└─────┘

原因:Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

不鼓励使用循环引用,默认情况下禁止使用循环引用。更新应用程序以删除 bean 之间的依赖周期。作为最后的手段,可以通过将 spring.main.allow-round-references 设置为 true 来自动打破这个循环

上面是官方说明报错原因和提供的解决方法,简单来说,就是Spring解决不了“先有鸡还是先有蛋”的问题即两个配置相互注入的Bean类。

解决方法1:可以通过在配置文件中将 spring.main.allow-round-references 设置为 true 来自动打破这个循环

例如:

spring:
  main:
    allow-circular-references: true

解决方法2:循环是从categoryServiceImpl开始的,可以通过增加@Lazy注解使其延迟加载

例如:

 	@Resource
    @Lazy
    private IDishService dishService;

成功解决




9、Spring Cache缓存的报错

报错

 ERROR 1020 --- [nio-8549-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.example.common.Re]] with root cause

java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.example.common.Re]

原因,在做Spring Cache缓存时,要求缓存的对象必须继承实现Serializable接口,从报错可以看出com.example.common.Re类没有继承或实现Serializable接口,继承接口就可以。

解决方法:

public class Re<T> implements Serializable 

成功解决,建议所有实体类都继承Serializable 接口,通用结果类也要继承Serializable 接口



springboot

的报错集合到此暂时告一段落,如有后续将会补充链接在此



版权声明:本文为czxboys原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。