Springboot的报错集合(1)
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
的报错集合到此暂时告一段落,如有后续将会补充链接在此