
Java异常及处理
文章平均质量分 52
AlbenXie
这个作者很懒,什么都没留下…
展开
-
logback配置
<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="./logs"/> <property name="APP_NAME" value="benefits-core"/> <pr.原创 2022-05-27 22:51:00 · 208 阅读 · 0 评论 -
Lombok的@EqualsAndHashCode(callSuper=true)的使用
@EqualsAndHashCode原文中提到的大致有以下几点:1.此注解会生成equals(Objectother)和hashCode()方法。2.它默认使用非静态,非瞬态的属性3.可通过参数exclude排除一些属性4.可通过参数of指定仅使用哪些属性5.它默认仅使用该类中定义的属性且不调用父类的方法6.可通过callSuper=true解决上一点问题。让其生成的equals方法和hashcode方法包含父类属性另:@Data相当于@Getter@Setter @RequiredArg.转载 2022-05-11 14:19:32 · 5052 阅读 · 0 评论 -
spring注解参数校验
一般入参我们都会转为vo对象。那么直接在对象的属性上注解即可。其实spring用的是hibernate的validator.使用:bean上加注解验证@NotBlankprivate String name;controller的bean加上@Valid@RequestMapping(value=”/template”, method = RequestMethod.POST) @ResponseBody public JSONObject create(@RequestB转载 2022-01-12 15:50:50 · 665 阅读 · 0 评论 -
try-catch-finally中的4个大坑,老程序员也搞不定
在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的“掌控”它,却并不是一件容易的事。别的不说,咱就拿 fianlly 来说吧,别看它的功能单一,但使用起来却“暗藏杀机”,若您不信,咱来看下面的这几个例子...坑1:finally中使用return若在 finally 中使用 return,那么即使 try-catch 中有 return 操作,也不会立马返回结果,而是再执行完 finally 中的语句再返回。此时问题就产生了:如果 finally 中转载 2021-06-02 17:23:00 · 557 阅读 · 0 评论 -
Java的对象工具类Objects
Java开发中经常要对对象进行非空判断以防止出现空指针。大部分同学都喜欢用下面这种方式来进行判断:if (obj!=null){ // 判断不等于空}if (obj==null){ // 判断等于空}这种方式没有什么问题。不过在 Java 7 中专门提供了一个工具类java.util.Objects可以处理的更好。java.util.Objects提供了一系列的静态方法来处理日常一些针对对象的操作。空值判断比如开始提到的null值判断我们可以优化为:if (转载 2021-05-18 16:55:17 · 695 阅读 · 0 评论 -
java.lang.IndexOutOfBoundsException
一般这个错误一出现,就是数组的问题,通常后面还会跟一个 Index: 0, Size: 0,也就是java.lang.IndexOutOfBoundsException: Index: 0, Size: 0什么意思呢?就是有个数组要取出0位置的值,程序发现那个位置也就是0位置那里并没有值,就会报这个错,也有人说是越界错误,也是可以理解的。数组越界了,那里当然也没有值可以给你取得的。所以归根到底是要取的值是空的。就容易解决了吧~...转载 2021-04-28 08:58:21 · 5025 阅读 · 0 评论 -
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结
自己在写ssm项目进行mapper的单元测试时遇到这个问题,根据网上的方法(XML头配置错误)检查自己的mapper.xml后没有发现错误。之后发现在建立mapper时将其他表一起建了mapper.java和mapper.xml。但是其他表的这俩个文件什么都没有写,在进行单元测试时会先扫描XML文件,而其他表的XML文件无内容,也就是没有头文件,所以报错。之后把其他表的删除,问题得到解决。一点小感受,对于初学者来说在学习新内容时一定要一个功能一个功能的去实现,从网上copy太多,出错后就不晓得哪里的问题转载 2021-04-27 11:01:09 · 1422 阅读 · 0 评论 -
@JsonFormat(pattern=“yyyy-MM-dd HH:mm:ss“,timezone=“GMT+8“)
java时间批量转化出现的问题:数据返回出现2020-12-10T04:01:49.000+0000时间解决方案:1. application.ymlspring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 serialization: #格式化输出 indent_output: true #忽略无法转换的对象转载 2021-04-17 17:35:26 · 6735 阅读 · 0 评论 -
异常:java.lang.IllegalArgumentException: Illegal character in scheme name at index 0: 1xx.xxx.x.xx
异常:原因&解决:一般是因为URL的拼写问题192.168.154.131:8080/solrURL必须要是完整的http://192.168.154.131:8080/solr若这样还有错误,建议检查一下你的这个字符串中间有没有空格,http前后有没有空格的问题本人遇到:我遇到的情况是这样的:我把路径写在yml配置文件中了,如下获取上面的url后调用,就会报上面写的异常信息。后来我在Windows中打印日志,并没有空格,但是在Linux中打印日.原创 2021-04-09 15:39:01 · 3191 阅读 · 0 评论 -
MySql的like语句中的百分号、下划线
1、问题:在开发中,测试提出了一个bug,在某搜索中,搜索 _,结果把不包含下划线的内容也查了出来!这是什么问题呢?今天特此记录一下,顺便给大家分享下!原sql:select * from table where condition like '%_%';结果: 搜索出来的是全部。原来,在mysql 中,下划线 _ 代表 全部 基本上等同于 *。2、解决方案:对sql 用 \ 进行转义最终达到的sql效果 :select * from table where condition.原创 2021-04-09 11:13:49 · 4245 阅读 · 1 评论 -
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; 解决方案
SQL语法错误异常原因有很多种,这里是因为字段名使用关键字。异常信息:2021-03-30 09:58:03.820 [http-nio-8089-exec-1] bond-crm ERROR druid.sql.Statement 149 - {conn-10010, pstmt-20000} execute error. select id, name, display_name, group, group_display_name, remark, create_time,...原创 2021-03-30 10:18:26 · 35352 阅读 · 0 评论 -
Linux执行Jar包: no main manifest attribute
今天创建了一个新项目,发现打包的jar很小,放到服务器上后,执行报错如下:no main manifest attribute原来pom.xml中少了如下配置<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</arti转载 2021-03-16 17:21:38 · 374 阅读 · 0 评论 -
Springboot项目拦截器中获取到请求参数后,controller获取不到
0 背景 拦截器被用来获取用户的请求日志,好处多多。一般来说,请求参数通过GET和POST的方式传递,GET请求参数通过request.getParameterMap()方法获取,POST请求参数通过request.getInputStream()方法获取。但是,当在项目中使用拦截器获取到请求参数后,发现controller中@RequestBody注解获取不到参数了。多番查阅发现,Spring中的request.getInputStream()和request....转载 2021-03-16 09:49:47 · 4294 阅读 · 0 评论 -
关于mybatis框架中update和delete返回值问题
问题:新手向求助下,如果使用注解,更新和删除怎样设置才会可以拿到受影响行数?在xml中配置的话,默认就可以得到,单数注解怎么能获取这个受影响行数呢???顺便咨询下大佬们,怎么判断mybatis增删改是否成功的,使用try...catch...捕获异常吗?我觉得如果用这个捕获异常,添加操作倒是可以判断是否成功,但是更新和删除就不行了,求解决办法解答:1、2、...原创 2021-03-11 11:08:16 · 628 阅读 · 0 评论 -
springboot 2.3.0及以上版本 解决@Validated @Valid 不起作用的问题
原因:今天搭建SpringBoot项目后发现 @NotEmpty 引用不出来,查询资料发现从SpringBoot 2.3.0之后放弃了默认对 javax.validation 的支持。解决办法:将springboot的版本降低到2.3.0以下;或者加入依赖 spring-boot-starter-validation;建议加入 spring-boot-starter-validation 依赖,这样不会改变springboot的版本(且不用指定validation的版本号),从而不影响项目的原创 2021-03-09 16:21:40 · 3022 阅读 · 0 评论 -
解决:log4j警告:WARN Please initialize the log4j system properly
问题描述:出现这个警告的原因是没有配置log4j.properties文件或者该配置文件在项目目录中的位置不对。1. 对于非Maven项目,log4j.properties文件放在src根目录下。2. 但是对于Maven项目,,log4j.properties文件必须放在Resource文件下。在Maven项目中,如下图:文件的名称为 log4j.properties , 文件中的内容设置为:log4j.rootLogger=WARN, stdoutlog4j.appe..原创 2021-03-09 13:21:36 · 2140 阅读 · 1 评论 -
SpringBoot项目版本升级:从1.5.3升级到2.1.8版本
项目版本升级:从升级到版本前言简单记录一次本人在自己的项目中,把版本升级到版本时升级的步骤,及遇到的问题。提升版本号更改文件中的版本号修改y文件中的部分配置在SpringBoot项目版本升级:从1.5.3升级到2.1.8版本前言简单记录一次本人在自己的SpringBoot项目project-template中,把1.5.3版本升级到2.1.8版本时升级的步骤,及遇到的问题。提升parent版本号更改pom文件中parent的版本号<parent> <g转载 2021-03-05 13:20:05 · 1832 阅读 · 0 评论 -
spring持久类po或者javabean为什么常常实现序列化?
理解1:MyBatis使用SerializedCache序列化缓存来实现可读写缓存类,并通过序列化和反序列化来保证通过缓存获取数据时,得到的是一个新的实例。如果配置为只读缓存,MyBatis就会使用Map来存储缓存值,这种情况下,从缓存中获取的对象就是同一个实例。MyBatis中配置缓存时,缓存元素<cache>有个readOnly属性,readOnly属性可以被设置为 true 或 false。只读缓存将对所有调用者返回同一个实例,因为对象没有进行序列化,所以速度最快。可写的缓存将通过原创 2021-03-03 19:15:33 · 529 阅读 · 1 评论 -
springboot2启动信息去除CONDITIONS EVALUATION REPORT后引发的思考
前言最近启动一个springboot2.2+版本项目时,发现控制台输出17:22:05 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.cloud.util.random.CachedRandomPropertySourceAutoConfiguration'17:22:05 [main] DEBUG o.s.b.转载 2021-03-02 16:53:37 · 3027 阅读 · 0 评论 -
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com
这个错误是我练习springBoot整合mybatis时报的错.org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'practice': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.facto转载 2021-03-02 16:51:21 · 2732 阅读 · 0 评论 -
处理 Exception 的几种实践,很优雅,被很多团队采纳!
在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范对异常的处理的原因。而团队之间的这些规范往往是截然不同的。本文给出几个被很多团队使用的异常处理最佳实践。在Finally块中清理资源或者使用try-with-resource语句当使用类似InputStream这种需要使用后关闭的资源时,一个常见的错误就是在try块的最后关闭资源。pu转载 2021-01-29 21:19:05 · 301 阅读 · 0 评论 -
Java自定义异常,应该继承Exception还是Runtime Exception,为什么?
回答1:继承Exception还是继承RuntimeException是由异常本身的特点决定的,而不是由是否是自定义的异常决定的。例如我要写一个java api,这个api中会调用一个极其操蛋的远端服务,这个远端服务经常超时和不可用。所以我决定以抛出自定义异常的形式向所有调用这个api的开发人员周知这一操蛋的现实,让他们在调用这个api时务必考虑到远端服务不可用时应该执行的补偿逻辑(比如尝试调用另一个api)。此时自定义的异常类就应继承Exception,这样其他开发人员在调用这个api时就会收到编原创 2020-10-10 16:05:03 · 4914 阅读 · 0 评论 -
关于mybatis用mysql时,插入返回自增主键的问题
公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了。其中涉及到插入实体要求返回主键id的问题,以前用ssh配合oracle很容易实现,因为有sequence,而且mysql也基本没用过,所以只好去百度了。这个内容还是比较好查的,如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//my转载 2020-10-09 19:30:21 · 294 阅读 · 0 评论 -
Java中throw和throws的区别
throw和throws的区别:1、throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出throw用在方法实现中,而throws用在方法声明中;throw只能用于抛出一种异常,而throws可以抛出多个异常2、throw关键字用来在程序中明确的抛出异常,相反 throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。3、throw是在代码块内的原创 2020-09-27 18:41:22 · 14313 阅读 · 0 评论 -
关于类加载的一些常见错误
最近在做类隔离相关的一些工作,而恰恰之前协助开发同学时也发现会遇到许多类加载相关的异常,并且往往比较难定位与解决。这里简单做一个小总结。类加载首先我们来捋一捋类加载的基础知识。以上是大家比较熟悉的类加载器模型,主要包含 3 种类加载器:BootstrapClassloader 根加载器,也就是系统类加载器,加载核心库,如 rt.jar。 ExtensionClassloader 扩展类加载器,主要加载/ext/下面的 jar 包 AppClassloader 离我们最近的类加载器,负责加载转载 2020-09-22 19:44:58 · 731 阅读 · 0 评论 -
ThreadLocal的应用场景和注意事项
前言这篇文章聊聊 ThreadLocal,我们经常会在一些开源中间件的源码中见到它的身影,比较常见的用途是保存上下文信息,还有就是保证了线程安全。实际上,ThreadLocal 为每个线程提供一个单独的变量,确是一种保证线程安全的手段,ThreadLocal 创建的变量只能被当前线程访问,其他线程不得干涉。ThreadLocal API使用 ThreadLocal 其实非常简单,直接看下面的示例:public class ThreadLocalSimpleDateFormat {转载 2020-09-22 17:03:15 · 1232 阅读 · 0 评论 -
使用ThreadLocal注意事项
需要注意两个事项:在get方法的时候出现null 内存泄漏或产生脏数据1、在get方法的时候出现nullpackage com.ray.deepintothread.ch04.topic_3;public class ThreadLocalGetNull { private int count = 0; public ThreadLocal<Integer> intThreadLocal = new ThreadLocal<Integer>();原创 2020-09-22 16:41:17 · 1103 阅读 · 1 评论 -
不同类型接口的异常处理规范
对于公司外的 http/api 开放接口必须使用 errorCode; 跨应用间 RPC 调用优先考虑使用 Result 方式,封装 isSuccess()方法、errorCode、errorMessage; 而应用内部推荐直接抛出异常即可。说明:关于 RPC 方法返回方式使用 Result 方式的理由:使用抛异常返回方式,调用方如果没有捕获到就会产生运行时错误。 如果不加栈信息,只是 new 自定义异常,加入自己的理解的 error message,对于调用端解决问题的帮助不会太多。如果加了栈原创 2020-09-21 15:57:57 · 2041 阅读 · 0 评论 -
java 可能会出现NPE的情况
防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。 反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。 2) 数据库的查询结果可能为 null。 3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。 4) 远程调用返回对象时,一律要求进行空指针判断,防...原创 2020-09-21 14:46:01 · 1131 阅读 · 0 评论 -
大公司Java异常处理的规范
项目的运行环境一定会出现各种问题,比如数据库服务器连接不上或者网络不通畅,所以异常处理代码会频繁地出现在代码里,这里我们来总结下异常处理部分的使用要点。要点1,尽量用try…catch…finally的语句来处理异常,在finally应当尽可能回收内存资源。要点2,尽量减少用try监控的代码块。比如某个方法有100行,其中第4到第20行代码用来连接数据库,第50到90行代码用来连接网络,我就见过不少程序员为了图省事,直接用一个try来包围第4到第90行的代码,把一些不需要监控的代码也用try包围转载 2020-09-21 14:02:23 · 357 阅读 · 0 评论 -
try catch在for循环外面还是里面
一、实例展示static void Main(string[] args) { //将异常写在循环外,出现异常循环终止 try { Console.WriteLine("抛出异常不输出"); for (int i = 0; i < 5; i++) { Console.WriteLine(i); Convert.ToInt16("test"); } } catch (Exce.原创 2020-09-21 11:26:11 · 8890 阅读 · 0 评论 -
关于catch语句块中要不要写业务逻辑代码
一、前言在catch中捕获到的异常一定要做处理,不能直接return。处理方式:(1)继续抛出(2)打出日志反例:上例中,对捕获到的异常没有做任何处理,这是不合适的,虽然不影响代码的逻辑,但是代码确实出问题了,而又没有将错误内容显示出来,这样会影响代码排除错误。正例:上例中,将捕获到的异常信息打印到日志中,这样就可以在不影响业务逻辑的情况下,还知道出现了什么异常,可以进一步解决问题。二、实例解释最近工作中,发现其他人员开发的模块功能中,在catch语句块中调.原创 2020-09-21 11:05:43 · 3374 阅读 · 0 评论 -
spring boot 多线程并发执行定时任务
Spring Boot默认情况下,所有定时任务会在一个线程中去执行,下面看测试代码,定义了三个测试Job:@Component@Slf4jpublic class TestJob { @Scheduled(cron = "0/3 * * * * ? ") public void job1() { log.info("do job1 start"); try { Thread.sleep(10000); } c转载 2020-09-01 15:30:37 · 1283 阅读 · 0 评论 -
spring boot 全局异常统一拦截处理
经常开发接口的同学肯定知道,接口返回的数据格式必须有固定的格式,方便调用者对于不同的异常我们在实际开发中最好也有统一的处理在spring boot中与默认的异常页面,如果我们要开发rest风格的api,返回的json数据那么异常提示也要是json格式的,返回一个页面的错误异常就不友好了接下来我看怎么统一处理这些异常信息以及自己定义一些常用的异常先定义一个全局的异常类,继承Exception ,里面有code属性,表示请求的响应状态码public class GlobalExcept转载 2020-08-26 19:42:32 · 1537 阅读 · 0 评论 -
Java异常机制 自定义异常
1、自定义异常类//自定义异常类MyException,继承RuntimeExceptionpublic class MyException extends Exception{ //无参构造方法 public MyException() { } //有参构造方法 (message:异常描述信息) public MyException(Strin...原创 2020-04-07 22:18:12 · 411 阅读 · 0 评论 -
Java异常机制 throws和throw的使用
package com.example.demo.exceptionTest;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/** * @Description throws和throw的使用 * @Auther gf.x * @Date 202...原创 2020-04-07 21:35:57 · 449 阅读 · 0 评论 -
异常机制 try、catch、finally、return 执行顺序
package com.example.demo;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/** * @Description 异常机制 try、catch、finally、return 执行顺序 * @Auther gf.x * @Dat...原创 2020-04-07 11:37:07 · 348 阅读 · 0 评论 -
Java异常处理机制
package com.example.demo;import org.junit.Test;/** * @Description Java异常处理机制 * @Auther gf.x * @Date 2020/4/6 13:51 */public class ExceptionTest { //1、异常的分类 public static void main(S...原创 2020-04-07 11:33:22 · 266 阅读 · 0 评论 -
java异常 分类和处理
一、java异常分类Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系:Error(错误):程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm虚拟机自身的非正常运行,calss文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error是系统内部的错误,由jvm抛出...原创 2020-04-01 16:44:20 · 934 阅读 · 1 评论 -
Java 异常处理的误区和经验总结
本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。误区一、异常的选择图 1. 异常分类图 1 描述了异常的结构,其实我们都知道异常分检测异常和非检测异常,但是在实际中又混淆了这两种异常的应用。由于非检测转载 2017-04-10 17:41:36 · 569 阅读 · 0 评论