异常一:IDEA连接mysql8.0.16,报[08001] Could not create connection to database server.
Connection to icloud_db@localhost failed.
[08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
原因是Mysql版本比较高出现的系列适配问题。
解决方式:
1. mysql5.5 使用:com.mysql.jdbc.Driver而8.0.*版本用com.mysql.cj.jdbc.Driver
2. 追加useSSL+serverTimezone+characterEncoding+autoReconnect
jdbc:mysql://localhost:3306/icloud_db?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true
mysql的连接驱动配置在这个位置,idea--->Database--->"+"---->>data source--->>mysql
------------------------------------------------------------------ 分割线 ----------------------------------------------------------------
异常二: IDEA中,使用generator插件生成mybatis代码,遇到Could not autowire. No beans of 'xxx' type found.异常
解决方式1:mapper文件上加@Repository注解,这是从sping2.0新增的一个注解,用于简化 Spring 的开发,实现数据访问;
2:在mapper文件上加@Component注解,把普通pojo实例化到spring容器中;
------------------------------------------------------------------ 分割线 ----------------------------------------------------------------
异常三: TypeException: The alias 'Criterion' is already mapped to the value ****
通过mybaits插件自动生成代码(多张数据库表的mapper文件)时,报如上异常;
原因:是因为mybatis2.0.1自身缺陷导致的bug,而且mybatis默认使用2.0.1。
解决方式:使用mybatis-spring 2.0.0 或 2.0.2-SNAPSHOT
------------------------------------------------------------------ 分割线 ----------------------------------------------------------------
异常四: FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
原因:通过MultipartFile文件上传时,报该异常。原因:上传文件大小超过tomcate的最大限制;
解决方式:
方式一:在application.properties中加入配置,改变上传文件最大值;
1、1.4版本之前配置方式:
multipart.maxFileSize=2000Mb
multipart.maxRequestSize=2500Mb
2、1.4版本后修改为:
spring.http.multipart.maxFileSize=2000Mb
spring.http.multipart.maxRequestSize=2500Mb
3、2.0版本之后修改该为:
spring.http.multipart.max-file-size=2000Mb
spring.http.multipart.max-request-size=2500Mb
方式二:在启动类 Application中添加配置,我是采取这种方式解决的。
1.给该类添加@Configuration 注解,
2.在该类中添加该方法;
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大
factory.setMaxFileSize("10240KB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();
}
------------------------------------------------------------------ 分割线 ----------------------------------------------------------------
异常五:Could not resolve view with name 'xxxxxxxxxxx' in servlet with name 'dispatcherServlet'"
出现该异常的原因:由于我的请求参数比较多,于是把它们封装成一个类,然后又在.mapper文件中引用了该类;而且Controller类用@Controller注解的;
解决方式:
给Controller类添加@RestController注解;
@Controller与@RestController区别如下
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
------------------------------------------------------------------ 分割线 ----------------------------------------------------------------
异常六: FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of ...
出现原因:上传的文件大小超过最大限制
解决方式:
在你的Application入口类中加入,multipartConfigElement方法
/**
* 设置文件上传最大值
*
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大
factory.setMaxFileSize(DataSize.of(50, DataUnit.MEGABYTES)); //MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.of(70, DataUnit.MEGABYTES));
return factory.createMultipartConfig();
}
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常七:在使用mybatis-generator:generate自动生成Dao和Mapper文件时报异常: Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project XXX: <properties> resource datasource.properties does not exist
原因:无法找到对应<properties> resource文件.
解决方法:在pom.xml文件中加入
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常八:redis Connection refused: no further information
原因: redis配置文件 配置有误或者格式错误;
解决方案:
1、 redis 配置,yml文件
# redis 配置 redis: database: 3 # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突 host: localhost # redis服务器地址(默认为localhost) port: 6379 # redis端口(默认为6379) password: # redis访问密码(默认为空) timeout: 0 # redis连接超时时间(单位为毫秒) jedis: pool: # redis连接池配置 max-active: 8 # 最大可用连接数(默认为8,负数表示无限) max-idle: 8 # 最大空闲连接数(默认为8,负数表示无限) min-idle: 0 # 最小空闲连接数(默认为0,该值只有为正数才有作用) max-wait: -1 # 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限)
2、 redis 配置,properties文件
spring.redis.hostName: 192.168.174.128
spring.redis.port: 6379
spring.redis.password: xuan123456
spring.redis.database: 2
spring.redis.timeout: 0
spring.redis.pool.max-active: 8
spring.redis.pool.max-wait: -1
spring.redis.pool.max-idle: 8
spring.redis.pool.min-idle: 0
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常九:System. out.println("中文") 在Console上打印出来为乱码
解决方案:File--Settings--Editor--File Encodings 中全局选择GBK;然后OK;
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常十:使用mybatis时,遇到
nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class XXX 时,
原因是mybatis插件自动生成mapper.xml中你新增了构造,但是mapper.java中你没同步对应的构造;
解决方案:请根据异常提示的类(mybatis自动生成的类),检查构造方法;缺少对应的构造方法;
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常十一:打包时遇到 target\surefire-reports for the individual test results.
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
原因:单元测试不通过,maven打包就停止编译;
解决方案:在pom.xml中<build>下加入
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
------------------------------------------------------------------ 分割线 ---------------------------------------------------------------
异常十二:SpringBoot引用Eureka导致返回结果由json变为xml解决方案
原因是:Eureka内部依赖了com.fasterxml.jackson.dataformat
的 jackson-dataformat-xml,xml的优先级比json高,所以返回的是xml;
此处列举了一种比较合理的解决方案:
1、 pom.xml中添加如下依赖:
<!-- 返回json还是xml -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-xml-provider</artifactId>
<version>2.14.2</version>
</dependency>
然后run 项目, 在访问的url接口后面加上.json则返回json;.xml则返回xml;
如: http://localhost:9092/user/login.json?account=1
原理是 jackson-jaxrs-xml-provider 会根据后缀拦截替换返回的是json还是xml;
如果加了 .json 报 404 则 需要配置一下 WebMvcConfigurer;
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
/**
* setUseSuffixPatternMatch : 设置是否是后缀模式匹配,如“/user”是否匹配/user.*,默认真即匹配;
* setUseTrailingSlashMatch : 设置是否自动后缀路径模式匹配,如“/user”是否匹配“/user/”,默认真即匹配
*
* @param configurer
*/
@Override
protected void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(true)
.setUseTrailingSlashMatch(true);
}
}
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十三:SpringCloud 项目时 IllegalStateException: PathVariable annotation was empty on param 0.
出错代码:
@GetMapping("/sayhi.json/{nickname}")
R sayhi(@PathVariable String nickname);
解决方案:PathVariable 添加 value
@PathVariable(value="nickname")
@GetMapping("/sayhi.json/{nickname}")
R sayhi(@PathVariable(value="nickname") String nickname);
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十三:springcloud gateway 运行报错:Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.
提示:
spring-boot-starter-web 依赖注释掉;如果不存在该依赖则需在.yml文件中加入:
spring:
main:
web-application-type: reactive
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十四:使用 Nacos + openfeign出现错误No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
原因:
这是因为由于SpringCloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错。
解决方案:
<!-- nacos(服务注册和发现) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--不使用Ribbon 进行客户端负载均衡-->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十五:使用nacos+sentinel,feign: sentinel: enabled: true 运行服务即报错:
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.cloud.openfeign.FeignClientFactoryBean.getFallback()" because "feignClientFactoryBean" is null
原因: alibaba已经修复该问题,不要听那些降springboot版本等骚操作;
解决方案:可以通过开启懒加载来解决该问题: 将 spring.cloud.openfeign.lazy-attributes-resolution
设置为 true
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十六:springcloud 项目 nacos + gateway 访问接口地址时报错:
gateway报There was an unexpected error (type=Service Unavailable, status=503)
异常原因:
由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。所以只需要引入springcloud loadbalancer包即可
解决方案:
在gateway 微服务模块的 pom.xml中添加依赖:然后重新运行服务即可;
<!--客户端负载均衡loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十七:微服务 Ambiguous mapping. Cannot map 'xxxxxxController' method
原因:多个服务中@PostMapping路径相同导致映射冲突;最合理的解决方案:
@FeignClient()中加contextId = "" 区分;
如:
·在UserClient111类中
@FeignClient(name = "provider-user",
contextId = "ManagerUserClient",
fallback = UserClientFallback.class,
configuration = FeignConfig.class)
public interface UserClient111 {
@Operation(summary = "用户注册") @PostMapping("/user/register.json") ResponseData register(@SpringQueryMap UserRegisterVO vo);
}
·在UserClient222类中 @FeignClient(name = "provider-user", contextId = "OperatorUserClient", fallback = UserClientFallback.class, configuration = FeignConfig.class) public interface UserClient222 {
@Operation(summary = "用户注册") @PostMapping("/user/register.json") ResponseData register(@SpringQueryMap UserRegisterVO vo);
}
------------------------------------------------------------------ 分割线 ---------------------------------------------------
异常十八:new Date()插入数据库后时间晚8小时
原因:中国是东八区,mysql使用了默认时区0时区;
个人觉得没必要修改mysql的时区,比较合理的一种方案是:设置 serverTimezone=GMT%2B8
如下:
jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
【腾讯云低价服务器】