- 博客(41)
- 收藏
- 关注
原创 SpringBoot或微服务项目打包方式
梳理清楚项目结构,以及各个模块之间的依赖关系。导入spring-boot-maven-plugin插件<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> .
2022-02-18 13:57:56
1224
原创 SpringBoot整合Swagger实现在线接口文档
SpringBoot整合Swagger实现在线接口文档创建一个SpringBoot项目,使用maven构建。在pom文件中添加如下依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.4.0</ve
2022-02-18 13:52:22
284
原创 Java中自定义返回类(Controller统一返回对象)
自定义返回类需求:我们很多时候在传Json数据时都需要确定浏览器向服务器的请求是否成功,所以我们在返回Json数据时使用一个包装类将数据包装起来,并在其中添加一些状态码和成功失败的方法。代码:public class Msg { private int code;//请求响应码 200成功,400失败 private String msg;//提示信息 private Map<String,Object> data = new HashMap<>();//返
2022-02-18 13:43:08
3801
原创 关闭windows占用的端口号命令
有时我们在windows上启动一些服务时,如tomcat,redis,mysql等。在关闭这个服务后,发现端口依旧被占用,此时可以通过以下方式将该端口关闭1.查询端口号进程 netstat -ano | findstr "端口号"说明:netstat -ano: 列出所有进程| findstr “端口号”: 从前面结果中通过管道,找到为指定端口号的字符串2.根据pid号将进程结束taskkill /pid 进程号 /f说明:taskkill: 杀死进程/pid: 以进程号杀.
2022-02-18 13:29:30
1692
原创 org.activiti.bpmn.exceptions.XMLException: src-resolve: 无法将名称 ‘extension‘ 解析为 ‘element declaration‘
今天在给客户方打包时,使用jar -jar命令去执行这个程序包一直报bean注入失败的异常。最开始以为是由于bean命名不规范导致注入不进去,修改规范名字后,依旧报这个错误。经过查询资料,发现是由于activiti项目的所在路径中存在中文!项目路径全改英文即可。我当时是在桌面建立了一个文件夹去放置的jar包,并且这个文件夹有中文,所以报错了。总结建什么文件夹,一定要用英文,不然会遇到莫名其妙的错误。...
2021-07-27 10:03:26
823
1
原创 解决java.util.LinkedHashMap cannot be cast to 实体类......的问题
关于java.util.LinkedHashMap cannot be cast to 实体类…问题的出现以及解决办法背景描述在学习谷粒商城时,使用openfeign进行远程调用,由于有个接口返回的是R<List<·Object>>类型的数据,在调用方使用List<·Object>去接收数据时,出现java.util.LinkedHashMap cannot be cast to xxx数据转换异常错误。可知远程调用会将待转换的数据转换成LinkedHashMap,
2021-07-06 21:13:21
16540
1
原创 设计模式-策略模式
策略模式模式介绍:策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。我的理解把完成某项功能时需要的各种方案,编写成对应的方案(算法)实现类,在使用时,创建对应的算法实现类传递给上下文类的构造器,让其调用对应方案(算法),实现这项功能。类结构图实现代码Strategy.java//抽象父类public abstract class Strategy { /**
2021-06-09 14:00:37
100
原创 Java深拷贝集合数据,流处理保证集合为新集合
这里提供一种使用流来处理拷贝集合的操作,拷贝出来的集合是一个与数据原集合相同,但不相关的新集合。@SuppressWarnings("unchecked")public static <T> List<T> deepCopyList(List<T> src){ List<T> dest = null; try{ ByteArrayOutputStream byteOut = new ByteArrayOutputStr.
2021-06-08 09:37:38
317
原创 RestTemplate调用超时问题解决
问题描述工作中,在调用同事写的某个接口的时候,使用的调用方式是RestTemplate。最开始数据量小,调用正常,随着数据量增加,这个接口过分的慢,后台日志出现Read time out异常。问题分析最开始我以为是网关设置的ribbon超时过短导致,调大后,还是不行。然后我配置了自定义的一个RestTemplate,由于集成了公司框架,里面有默认的restTemplate,所以为当前bean指定一个名字。如下 @Configuration public class RestTemplat
2021-03-25 10:01:40
8593
原创 加了@LoadBalanced不能使用ip来调用远程接口
问题背景说明之前在工作中写了一个定时任务,其中需要调用另一个模块的数据,于是我使用RestTemplate的方式进行调用,我在配置文件中配置了那个模块的地址(使用的是注册中心中的微服务名),并通过@Value的方式注入到使用的地方。本来没啥问题的,可是同事他在记录日志的时候,正好使用的也是那一个模块,他也是将那个模块的地址写在配置文件中,但是是使用的ip的形式,正好,他看见我这样写,就模仿我也使用微服务名来调用,他发现怎么也调用不成功,于是就改成了在代码中直接new一个RestTemplate的方式,但
2021-02-04 15:40:51
1746
3
原创 SpringBoot借助easypoi实现Excel文件上传下载解析
pompom中除了springboot项目必要的场景启动器(starter),还需要加入如下,esaypoi的依赖。注意easypoi的版本,博主之前使用的3.2.0,启动总是报错,重建了个工程,换成低版本才运行成功。 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId>
2021-01-27 10:03:09
972
原创 SpringBoot注入数组,集合的巧妙方法
我们在项目中很多时候都有注入数组或集合的需求,利用SpringBoot官方指定的注入,需要编写config配置类,再用@Autowired注解注入,这种方式比较麻烦。简单便捷的注入方式首先再application.yml或application.properties配置文件中编写配置。如下图在需要使用的地方使用@Value注解注入,注意SPEL表达式的编写。这里变量类型可以定义为String[]数组,也可以定义为List集合。在使用的时候按照它们各自的规则取就行了。..
2021-01-22 11:15:58
6956
2
原创 @ControllerAdvice全局处理异常不起作用
在创建controller层的全局异常处理时发现不起作用。最终发现是没有被主启动类扫描到,于是在主启动加上包名就可以了。
2020-11-18 14:21:18
970
原创 java.lang.Long cannot be cast to java.lang.Integer
问题描述:当数据库字段为 int 型(有符号int型),但是如果在 sql 中使用了某些函数,jdbc 会自动转型为 long,例如:select sum(money) from account where accountId = 123。这个行为是 jdbc自动做的,目的是为了防止数据溢出,因为在本例中 money 本来是 int 型,但是 sum(money) 以后很可能数值会超过 java Integer.MAX_VALUE值。另一种 int 自动转 long 型是因为字段使用是无符号 i...
2020-11-04 15:32:29
2767
原创 之前学HashMap的知识,开发中居然用到了。
之前学HashMap的知识,开发中居然用到了。在学习HashMap底层实现时,知道底层的数据结构是数组加链表实现(JDK1.8改为数组+链表+红黑树)。每次在进行元素的put时,都会根据key的hashcode值经过hash算法,得到存储在数据中的位置。由这个特性也可以看出,Map是无序的。今天项目中有个接口的需求是排序map,我用首先将map转换为EntrySet,然后通过Comparator接口对map进行value值的降序排序。奇怪的事情发生了,排好序后,将数据传给前台,数据并非有序。我迷惑了,于
2020-11-02 10:52:48
177
原创 JDBC、Mybatis的连接MySQL时url信息配置
中文查询不到结果问题描述: 在使用jdbc进行数据库连接时,如果sql语句中的where条件有中文,查询不到数据。解决办法:在获取数据库连接里这样写:jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai"解释:jdbc:mysql://loca
2020-09-17 11:11:45
509
原创 二叉树之前序、中序、后序遍历(结合图解例题包你看懂)
文章目录二叉树之前序、中序、后序遍历前序遍历中序遍历后序遍历LeetCode简单题总结二叉树之前序、中序、后序遍历下面遍历以下面这课二叉树为例对应每个节点的代码(Java)如下:Class BinaryTree{ private int val; private BinaryTree left; private BinaryTree right;}前序遍历思想前序遍历,也就是先遍历根结点,再遍历左右结点。那么对应遍历顺序应为 1->4->3->2->5
2020-09-13 22:36:10
5226
原创 Redis持久化方式(RDB,AOF),看完彻底理解了
文章目录Redis持久化方式(RDB,AOF)RDB持久化RDB理解备份过程RDB文件位置RDB的保存策略RDB的优缺点其他常用操作RDB的备份与恢复AOF如何持久化的何时同步数据如何重写?AOF比较坑的地方:AOF的优缺点AOF和RDB用谁?Redis持久化方式(RDB,AOF)我们知道,Redis是支持持久化操作的,持久化操作分为RDB(Redis DataBase)和AOF(Append of File)RDB持久化通过RDB的全称,我们就能够知道这种方式是redis主要的持久化方式。
2020-09-10 21:12:05
565
原创 理解理解CAS和Volatile
文章目录CAS的理解什么是CAS自旋锁ABA问题如何解决?Volatile可见性体会不保证原子性体会禁止指令重排CAS的理解什么是CASCompareAndSweep比较并交换。AtomicInteger atomicInteger = new AtomicInteger(1);//期望值是1,如果达到,那么就更新为2,否则不更新atomicInteger.compareAndSet(1,2);自旋锁比较当前线程工作内存中的值和主内存中的值,如果这个值是期望的,那么就执行操作,否则一直循
2020-09-10 20:32:03
297
原创 聊聊JVM垃圾回收算法
文章目录JVM垃圾回收算法判断对象存活的两种方式:引用计数算法可达性分析算法(java中使用)三种垃圾收集算法标记-清除算法标记-整理算法复制算法三个算法总结一个对象被垃圾回收之前,要判断它是否是垃圾对象(不再使用的对象)。JVM垃圾回收算法判断对象存活的两种方式:引用计数算法原理:为每个对象保存一个整型的引用计数器属性,记录对象被引用的情况,如果被引用着,那么它即为存活对象。优点:实现简单,便于识别,回收没有延迟性。缺点:额外内存开销;更新技术器增加时间开销;无法处理循环引用问题。什么
2020-09-08 22:11:09
144
原创 原来你是这样的线程池
我们知道,创建线程有四种方式继承Thread类实现Runnable接口实现Callable接口,jdk1.5新增使用线程池,jdk1.5新增那么,什么是线程池?简单理解,线程池就是将线程提前创建好的一个池子,需要的时候就取出使用,不在使用就归还给线程池。线程池有什么作用?我们创建、销毁线程,都要消耗特别大的资源,并发情况下,对于性能影响很大。使用线程池,能够提高响应速度。降低资源消耗,便于线程的管理。如何创建?1.通过官方提供的API创建ExecutorService th.
2020-09-06 23:44:54
140
原创 JVM垃圾回收器之G1(Garbage First)(一)
前面介绍了Serial GC、CMS、Parallel GC。这些垃圾回收器相较于G1,还是稍显逊色。G1在大内存的情况下优势十分明显。G1设定的目标:延迟可控的情况下获得尽可能高的吞吐量。强大的G1垃圾回收器我们知道,在G1垃圾回收器之前,前面的垃圾回收器都是将内存划分为新生代与老年代,并且它们的内存区域是连续的。而G1则不同,虽然它依旧有新生代、老年代,但是它用一个一个的region来表示。原来的内存结构G1使用的内存结构G1将内存划分为一个一个的region,内存回收就是以.
2020-09-03 21:38:01
546
原创 低延迟的CMS(Concurrent-Mark-Sweep)垃圾回收器
CMS垃圾回收器JDK1.5,HotSpot推出了一款在强交互应用中几乎可以认为有划时代意义的垃圾收集器: CMS(Concurrent-Mark-Sweep)。特点:真正意义上的并发收集,垃圾回收线程能够与用户线程同时工作!垃圾收集时,用户线程停顿时间(STW)很短。老年代垃圾回收器,采用标记-清除算法。工作原理清理过程:初始标记(STW)-> 并发标记(同用户线程一起)->重新标记(STW)->并发清理(同用户线程一起)->重置线程(同用户线程一起)
2020-09-01 21:50:12
274
原创 JVM复习之垃圾回收器(Serial ParNew Parallel)
Java和C++最大的区别就是,C++自己管理内存,Java有自动的垃圾回收功能,提供了各种各样的垃圾回收器。垃圾回收器分类对于年轻代和老年代,所用的垃圾回收器不同。如上图中Serial GC、ParNew GC、 Parallel GC是针对于年轻代的垃圾回收器。而Serial Old GC、CMS、 Parallel Old GC是针对于老年代的垃圾回收器。G1垃圾回收器采用了新的内存划分方式,所以既用于年轻代又用于老年代。Serial GC串行垃圾回收器,采用复制算法,STW的方式
2020-08-31 16:15:47
346
原创 IDEA2019.3中文包改中文
IDEA2019.3中文包对于英文不是很好的小伙伴,是不是还搞不太懂idea强大的功能呢?别怕,有了下面这个中文包,可以将你的idea英文改成中文显示。链接:https://pan.baidu.com/s/1UixvEormyh9XdEHnQZnGvw提取码:ehyd操作步骤将下载好的压缩包解压到知道的目录。将解压出来的jar包放进你安装IDEA位置的lib目录下。重启IDEA或打开IDEA查看效果...
2020-08-30 13:39:40
16066
29
原创 JVM复习之对象的实例化、内存布局和访问定位
对象的实例化java是一门完全面向对象的语言,所以我们需要熟悉对象实例化的方式及过程。对象实例化的几种方式通过new关键词创建。Person p = new Person()通过Class类的newInstance()方式。Class clazz = Person.classPerson p = (Person)clazz.newInstance();通过Constructor的newInstance(Xxx)方法Class clazz = Person.class;
2020-08-29 22:17:24
113
原创 JVM复习之虚拟机栈之栈帧之动态链接和方法调用
上一小结提到了局部变量表和操作数栈,这一节接着总结栈针中的动态链接和方法的调用及方法返回地址动态连接每一个栈帧内部都包含一个指向运行时常量池中的该栈帧所属方法的引用。而包含这个引用就是为了支持当前方法的代码能够实现动态链接。在字节码文件中,所有变量和方法的引用都作为符号引用,保存在class文件的常量池。动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。为什么需要常量池?提供一些符号和常量,便于指令的识别。一个字节码文件里面如果代码量比较少,但是它包含的信息加载进内存后并不
2020-08-27 21:27:56
560
原创 JVM复习之虚拟机栈之栈帧之局部变量表、操作数栈
虚拟机栈出现背景由于跨平台的设计,Java指令都是根据栈来设计,不同CPU架构不同,所以不能设计为基于寄存器的。优点:指令集小,编译器容易实现缺点:性能下降,实现同样操作需要更多指令。为什么Java开发人员一提到Java内存结构,就会将内存区理解为堆和栈?栈是运行的单位。堆是存储的单位Java虚拟机栈是什么?Java Virtual Machine Stack,每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈针,对应着一次一次的方法调用。声明周期和线程生命周期一起
2020-08-25 21:24:41
402
原创 JVM复习之运行时数据区概述及程序计数器
运行时数据区是什么?数据运行的区域。什么样?注意:以上各区比例并非实际比例运行时数据区,有一部分会随虚拟机启动而创建,退出而销毁。有一部分会与线程对应,随线程开始而创建,结束而销毁。堆和方法区线程共享程序计数器、栈、本地栈线程独占。程序计数器也叫PC寄存器作用存放指向下一条指令的地址。就是将要执行的指令代码。由执行引擎去读取。特点内存小,几乎可忽略,运行速度最快。每个线程都有自己的程序计数器,线程私有。生命周期即线程的声明周期。唯一一个在JAVA虚拟机
2020-08-24 21:12:58
133
原创 JVM复习之类加载子系统
类加载子系统所处JVM中的位置类加载子系统图类加载子系统的作用类加载子系统负责从文件系统或网络中加载Class文件,class文件在开头有特定的文件标识(CAFE BABY)ClassLoader只负责class文件的加载,至于运行与否,取决于执行引擎。加载的类信息存放在方法区的内存空间中。其中除了保存类信息外,还会存放运行时常量池信息,字符串字面量和数字常量等。链接阶段验证:确保Class文件中字节流包含信息符合虚拟机要求。包括四种验证:文件格式、元数据、字符码、符号引用。
2020-08-24 20:46:05
123
原创 JAVA反射知识点复习
JAVA反射java和C、C++一样,是一门静态语言。但有了Reflection(反射),让其具有动态性!什么是反射?每当加载完一个类后,堆内存的方法区中就产生了一个Class类型的对象,这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象,就像一面镜子一样,通过这个镜子看到类的结构。我们形象称之为:反射。对于java.lang.Class类的理解通过javac.exe命令,生成字节码文件后,再通过java.exe命令对字节码文件进行解释运行,相当于将其加载到
2020-08-23 21:11:14
166
原创 JAVA集合知识点复习
JAVA集合java集合,就像一种容器,可以动态把对个对象的引用放入容器。集合与数组的区别数组通过索引获取元素的值声明后就确定了其类型初始化以后,长度就确定提供的属性和方法少数组存储的数据有序,可重复性集合“动态数组”,长度可随数据的增加进行扩容。提供了丰富的属性、方法可以根据不同的场景使用不同的集合实现类。常用的集合集合间的关系Collection接口List接口: 有序,可重复ArrayListLinkedListVectorSet接口:
2020-08-22 21:17:09
145
原创 elasticsearch-analysis-ik两个版本的zip文件
官网下载太慢,给大家提供网盘地址。别忘记给博主点个赞,谢谢啦。6.7.0版本百度网盘地址:链接:https://pan.baidu.com/s/1Hs1cm-aQy9Sp-d13L6RWtA提取码:36m57.6.1版本百度网盘地址:链接:https://pan.baidu.com/s/1FSOWuHRgM5hCilr7mc0hSw提取码:ue6v...
2020-07-05 18:31:19
561
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人