- 博客(358)
- 资源 (1)
- 收藏
- 关注
原创 com.fasterxml.jackson.databind.exc.InvalidFormatException问题
客户端使用fastjson进行序列化,服务端使用jackson反序列化失败。报错。Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2022-04-04 04:04:04": not a valid representation (error: Failed to parse Date valu
2022-06-29 18:19:19
6198
原创 【纯干货】SpringBoot 整合 ES 进行各种高级查询搜索
在上篇 SpringBoot 整合 ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的索引和文档的基本增删改查的操作方法!本文将重点介绍 ES 的各种高级查询写法和使用。废话不多说,直接上代码!本文采用的版本号是,服务端 es 的版本号是,客户端采用的是官方推荐的版本号是,方便与的版本兼容。单条件精确查询 多条件精确查询,取并集 范围查询 模糊查询,支持通配符 不使用通配符的模糊查询,左右匹配 多字段模糊查询
2022-06-25 22:14:48
11370
2
原创 使用 Elasticsearch 搭建自己的搜索系统,真心强大!
Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。大名鼎鼎的Lucene 搜索引擎被广泛用于搜索领域,但是操作复杂繁琐,总是让开发者敬而远之。而 Elasticsearch将 Lucene 作为其核心来实现所有索引和搜索的功能,通过简单的 RESTful 语法来隐藏掉 Lucene 的复杂性,从而让全文搜索变得简单ES在Lucene基础上,提供了一些分布式的实现:集群,分片,复制等。我们本文案例是一个迷你商品搜索系统,为什么不考虑使用MySQL来实现搜索功能呢
2022-06-25 22:12:16
3488
原创 程序员新人上午使用 isXxx 形式定义布尔类型,下午就被劝退?
小二是新来的背锅侠,哦,不不不,新来的实习生。面试过程中表现得非常不错,各种问题对答如流,老板和我都倍感欣慰。这么优秀的人,绝不能让他浪费一分一秒,于是很快,我就给他安排了一个非常简单的任务。大家都知道,在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个 RPC 接口的时候,我们一般会定义一个字段表示本次请求是否成功的。关于这个”本次请求是否成功”的字段的定义,我见过很多不同的开发者,定义的方式都不同,尤其是在属性的命名上,有人用 success,有人用 isSuccess 表示。
2022-06-25 22:10:29
123
原创 别再用 System.currentTimeMillis() 统计耗时了,太 Low,StopWatch 好用到爆!
你还在用 System.currentTimeMillis... 统计耗时?比如下面这段代码:System.currentTimeMillis...这种方式统计耗时确实是用的最多的,因为它不用引入其他的 JAR 包,JDK 就能搞定,但是它用起来有几个不方便的地方:1)需要定义初始时间值,再用当前时间进行手工计算;2)统计多个任务的耗时比较麻烦,如果 start 赋值搞错可能还会出现逻辑问题;有没有其他的更好的替代方案呢?答案是肯定的:StopWatch!StopWatch 是一个统计耗时的工具类:常
2022-06-25 22:08:50
623
原创 为什么线程崩溃不会导致 JVM 崩溃
网上看到一个很有意思的美团面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题我看了不少回答,但发现都没答到根上,所以决定答一答。相信大家看完肯定会有收获,本文分以下几节来探讨。线程崩溃,进程一定会崩溃吗?进程是如何崩溃的——信号机制简介。为什么在 JVM 中线程崩溃不会导致 JVM 进程崩溃?openJDK 源码解析。一般来说如果线程是因为非法访问内存引起的崩溃,那么进程肯定会崩溃。为什么系统要让进程崩溃呢?这主要是因为在进程中,各个线程的地址空间是共享的。既然是共享,那么某个线程对地址的非法访问就
2022-06-25 21:53:15
220
原创 如何用 Nginx 禁止国外 IP 访问网站!
之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站。想要实现这个功能有很多方法,下面我就来介绍基于 Nginx 的 ngx_http_geoip2 模块来禁止国外 IP 访问网站。# 安装 geoip2 扩展依赖# 下载 ngx_http_geoip2_module 模块解压模块到指定路径我这里解压到 /usr/local 目录下:# 安装 nginx 模块首先说明下环境,我的 ngi
2022-06-25 21:50:39
772
原创 Spring Boot 启动时自动执行代码的几种方式
前言java自身的启动时加载方式Spring启动时加载方式代码测试总结目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用注解实现。当然也可以去实现Spring的与接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载顺序。static代码块static静态代码块,在类加载的时候即自动执行。构造方法在对象初始化时执行。执行顺序在stat
2022-06-25 21:48:34
185
原创 在Spring Boot中如何实现循环重试
在实际工作中,重处理是一个非常常见的场景,比如: 发送消息失败。 调用远程服务失败。 争抢锁失败。 这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。72讲SpringBoot实践视频教程,大小7.2G@Retryable.
2022-05-24 23:31:19
971
原创 Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?
前言在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的,下面具体分析一下spring是如何解决bean之间循环依赖,为什么要使用到三级缓存,而不是二级缓存?bean生命周期首先大家需要了解一下bean在spring中的生命周期,bean在spring的加载流程,才能够更加清晰知道spring是如何解决循环依赖的。我们在spring的BeanFactory工厂列举了很多接口,代表着bean..
2022-05-24 23:17:04
142
原创 900W+ 数据,从 17s 到 300ms,如何操作
有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms(execution: 16 s 831 ms, fetching: 107 ms),按照下文的方式调整SQL后,耗时347 ms(execution: 163 ms, fetching: 184 ms);操作:查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段;原理:1、减少回表操作;2、可参考《阿里巴巴Java开..
2022-05-24 23:09:34
88
原创 Java8 判空这样写,惊艳,又骚气
在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示在这种情况下,有如下代码user.getAddress().getProvince();这种写法,在user为null时,是有可能报NullPointerException异常的。为了解决这个问题,于是采用下面的写法if(user!=null){Addressaddress=user.getAddress();...
2022-05-24 23:01:30
407
原创 Mybatis 批处理真牛逼
问题原因在公司写项目的时候,有一个自动对账的需求,需要从文件中读取几万条数据插入到数据库中,后续可能跟着业务的增长,会上升到几十万,所以对于插入需要进行批处理操作,下面我们就来看看我是怎么一步一步踩坑的。简单了解一下批处理背后的秘密,BatchExecutor批处理是 JDBC 编程中的另一种优化手段。JDBC 在执行 SQL 语句时,会将 SQL 语句以及实参通过网络请求的方式发送到数据库,一次执行一条 SQL 语句,一方面会减小请求包的有效负载,另一个方面会增加耗费在网络..
2022-05-24 22:57:51
2551
1
原创 IoC 容器-BeanPostProcessor
BeanPostProcessor 接口 也叫 Bean 后置处理器,作用是在 Bean 对象实例化和依赖注入完成后,在显示调用 bean 的 init-method(初始化方法)的前后添加我们自己的处理逻辑。注意是 Bean 实例化完毕后及依赖注入完成后触发的,接口的源码如下。public interface BeanPostProcessor { /** * 实例化、依赖注入完毕, * 在调用显示的初始化之前完成一些定制的初始化任务 */ Object
2022-05-24 15:21:36
83
原创 IoC 容器-依赖注入(DI)
前面我们主要分析了 FileSystemXmlApplicationContext 这个具体的 IoC 容器实现类 的初始化源码,在 IoC 容器 中建立了 beanName 到 BeanDefinition 的数据映射,通过一个 ConcurrentHashMap。现在我们来看一下 Spring 是如何将 IoC 容器中存在依赖关系的 bean 根据配置联系在一起的。Spring 中触发 IoC 容器“依赖注入” 的方式有两种,一个是应用程序通过 getBean()方法 向容器索要 bean 实例 时
2022-05-24 15:19:28
251
原创 IoC 容器-将 BeanDefinition 注册进 IoC 容器
这篇文章分享一下 spring IoC 容器初始化第三部分的代码,也就是将前面解析出来的 BeanDefinition 对象 注册进 IoC 容器,其实就是存入一个 ConcurrentHashMap<String, BeanDefinition> 中。回过头看一下前面在 DefaultBeanDefinitionDocumentReader 中实现的 processBeanDefinition(Element ele, BeanDefinitionParserDelegate delega
2022-05-24 15:16:40
164
原创 IoC 容器-将bean解析封装成BeanDefinition
接着上一篇的 BeanDefinition 资源定位开始讲。Spring IoC 容器 BeanDefinition 解析过程就是把用户在配置文件中配置的 bean,解析并封装成 IoC 容器可以装载的 BeanDefinition 对象,BeanDefinition 是 Spring 定义的基本数据结构,其中的属性与配置文件中 bean 的属性相对应。首先看一下 AbstractRefreshableApplicationContext 的 refreshBeanFactory() 方法,这是一个模板
2022-05-24 15:14:34
217
原创 IoC 容器-BeanDefinition的资源定位过程
当我们传入一个 Spring 配置文件去实例化 FileSystemXmlApplicationContext 时,可以看一下它的构造方法都做了什么。/** * 下面这 4 个构造方法都调用了第 5 个构造方法 * @param configLocation * @throws BeansException */// configLocation 包含了 BeanDefinition 所在的文件路径public FileSystemXmlApplicationContext(String
2022-05-24 15:11:09
151
原创 4种Redis集群方案介绍+优缺点对比
在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。redis也是一样,为了解决单机故障引入了主从模式,但主从模式存在一个问题:master节点故障后服务,需要人为的手动将slave节点切换成为maser节点后服务才恢复。redis为解决这一问题又引入了哨兵模式,哨兵模式能在master节点故障后能自动将salve节点提升成master
2022-05-20 14:38:57
282
原创 select......for update 会锁表还是锁行
select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。没用索引/主键的话就是表锁,否则就是是行锁。验证:建表sql//id为主键//name为唯一索引CREATETABLE`user`(`id`INT(11)NOTNULLAUTO_INCREMENT,`name`VARCHAR(255)DEFAULTN...
2022-04-28 14:46:33
283
原创 Java EasyExcel不创建实体对象(Model)读取数据
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version></dependency><dependency> <groupId>com.alibaba</groupId> <ar.
2022-04-27 16:20:50
4178
原创 Spring Boot Mybatis 搞反向工程
1. 拷贝 Mybatis 反向工程配置文件到项目的根目录下2. 根据项目及表的情况,修改 GeneratorMapper.xml 配置 如果使用 高版本 , 驱动类变为:com.mysql.cj.jdbc.Driver url 后面应该加属性 nullCatalogMeansCurrent=true ,否则生成有问题 当前版本 MySQL 数据库为 5.7主要根据注释来修改自己的内容<?xmlversion="1.0"encoding="UTF-8"?&..
2022-04-15 09:30:36
809
原创 clickhouse使用遇到的坑
使用驱动版本<!--ClickHouse驱动--><dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.2.4</version></dependency>Error during connection to
2022-04-13 15:49:48
11415
原创 Centos7安装Redis
一、安装gcc依赖由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装[root@localhost local]# yum install -y gcc二、下载并解压安装包[root@localhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz[root@localhost local]# tar -zxvf re..
2022-04-07 11:28:29
94
原创 这一次搞懂 Spring 的 Bean 实例化原理
前两篇文章分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕着这些BeanDefinition对象进行一系列的处理,如BeanDefinitionRegistryPostProcessor对象方法的调用、BeanFactoryPostProcessor对象方法的调用以及Bean实例的创建都离不开这些BeanDefinition对象。下面就来看看
2022-04-02 21:59:58
98
原创 SpringBoot + Redis:模拟 10w 人的秒杀抢单
本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:Jedis的nx生成锁 如何删除锁 模拟抢单动作(10w个人开抢) jedis的nx生成锁 对于java中想操作redis,好的方式是使用jedis,首先pom中引入依赖:<dependency><groupId>redis.clie...
2022-04-02 21:57:00
93
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人