Spring boot开发中的异常及其处理过程

标签: Springboot 分类: Java 创建时间:2019-03-12 07:35:47 更新时间:2024-11-15 10:49:43

1.Null value was assigned to a property [class cn.zjdt.api.entity.Report.status] of primitive type setter of cn.zjdt.api.entity.Report.status

主要是因为在java的entity中使用了boolean类型,而数据库中这个字段的值是null
stackoverflow中这么解释的

1
According to this SO thread, the solution is to use the non-primitive wrapper types; e.g., Integer instead of int.

2.com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException)

主要原因是引用属性类型为包装类型,而setter/getter方法的返回类型或设置类型和属性类型不一致为基本类型所导致的。

1
2
3
4
5
6
7
8
private Boolean status=false;
public boolean isStatus() {
return status;
}

public void setStatus(boolean status) {
this.status = status;
}

3.could not extract ResultSet

多半是sql语句有问题。

4.spring启动不了报错:Failed to introspect Class [cn.zjdt.common.config.CorsConfig] from ClassLoader [sun.misc.Launcher$AppClassLoader@14dad5dc]

spring boot打包成war包运行时总是出错。
在我本地运行好好的,到了别人的机子上,就是不行,部分日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2019-08-02 15:41:06,443 ERROR [main] o.s.boot.SpringApplication [SpringApplication.java : 858] Application run failed
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64)
...
at cn.zjdt.Application.main(Application.java:9)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [cn.zjdt.common.config.CorsConfig] from ClassLoader [sun.misc.Launcher$AppClassLoader@14dad5dc]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:686)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:583)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:568)
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:626)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:721)
...
... 16 common frames omitted
Caused by: java.lang.NoClassDefFoundError: javax/servlet/Filter
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
...
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:668)
... 38 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 78 common frames omitted

贴几张图:

看上面一头雾水,也找不到方法。主要是因为,tomcat中多加了scope,导致了版本不一致的问题,将<scope>provided</scope>注释掉就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 错误 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

<!-- 正确 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- <scope>provided</scope> -->
</dependency>

5.Configuration Annotation Proessor not found in classpath

pom.xml中添加如下内容:

1
2
3
4
5
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-configuration-processor </artifactId>
<optional> true </optional>
</dependency>

6.org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputExcept

多半是配置文件application.yml的原因,修改为utf-8编码或者是注意空格问题。

7.ERROR o.s.boot.SpringApplication - Application run failed

开发时在本地运行debug模式下运行好好的,但是部署到服务器上,就出现了下面的问题。

1
2
ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@26bd5d2a] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager

解决方法:在每一个应用的application.yml配置文件中添加:

1
2
3
4
spring:
## fix error tomcat
jmx:
default-domain: 应用程序标志
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。