自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(206)
  • 资源 (3)
  • 收藏
  • 关注

原创 实现数据库中的数据实时同步到redis,ElasticSearch

详细请查看数据库中的数据同步到redis和数据库中的数据同步到es(es基于7.2版本)里面有详细的Readme.md说明,如果有什么问题欢迎留言和建议。该项目模块包括分布式事务的实现、分布式搜索ElasticSearch7.2、数据的实时同步、使用rabbitmq进行消息的订阅与发布,并保证生产端到消息中间件的消息不丢失,消息重发策略,消息中间件到消费端的消息不丢失,死信队列的实现等功能,全...

2019-07-29 19:55:43 4419 1

原创 CompletableFuture 处理异步异常

0L,在使用异步CompletableFuture时,无论是否有返回值都要调用get()/join()方法,避免程序执行报错了,仍然返回成功。如果在程序报错时需要对上一个异步任务结果做其他操作,可以调用whenComplete()、handle()处理,如果只是对异常做处理,不涉及对上一个异步任务结果的情况,调用exceptionally()处理。

2024-04-15 16:10:58 267

原创 Nginx配置

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。相同类型的表达式,字符串长的会优先匹配。

2024-04-15 15:13:16 898

原创 SpringBoot 接口加密解密,新姿势!

在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用如果我们想保证数据传输的安全,对接口出参加密,入参解密。但是不想写重复代码,我们可以提供一个通用starter,提供通用加密解密功能自定义starter步骤创建工厂,编写功能代码声明自动配置类,把需要对外提供的对象创建好,通过配置类统一向外暴露。

2024-04-13 14:53:32 559

原创 SpringCloud Alibaba技术栈实战

SpringCloud Alibaba技术栈实战

2020-12-14 17:37:52 401

原创 Java 开发提升十倍生产力:IDEA 远程一键部署 Spring Boot 到 Docker

https://mp.weixin.qq.com/s/3x0MLz7DkHZ49EnmDzNcBQ

2020-10-03 16:32:26 321

转载 Spring Boot 如何使用拦截器、过滤器、监听器?

过滤器过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术。如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应。过滤器的使用首先需要实现 Filter接口然后重写它的三个方法init 方法:在容器中创建当前过滤器的时候自动调用destory 方法:在容器中销毁当前过滤器的时候自动调用doFilter 方法:过滤的

2020-09-25 14:40:49 314

转载 简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式和工厂方法模式抽象工厂模式

2020-09-14 14:23:47 132

转载 Reactor模式

在扯到Kafka之前我们先来说说Reactor模式,基本上只要是底层的高性能网络通信就离不开Reactor模式。像Netty、Redis都是使用Reactor模式。像我们以前刚学网络编程的时候以下代码可是非常的熟悉,新来一个请求,要么在当前线程直接处理了,要么新起一个线程处理。在早期这样的编程是没问题的,但是随着互联网的快速发展,单线程处理不过来,也不能充分的利用计算机资源。而每个请求都新起一个线程去处理,资源的要求就太高了,并且创建线程也是一个重操作。说到这有人想到了,那搞个线程池不就完事了嘛,

2020-08-22 17:43:49 202

转载 抛出这8个问题,检验你是否真的会ThreadLocal

一、概述1、官方术语ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。2、大白话ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。二、应用场景每个

2020-08-18 20:24:42 207 1

转载 每秒上千订单场景下的分布式锁高并发优化实践!

每秒上千订单场景下的分布式锁高并发优化实践!

2020-08-13 17:18:23 157

原创 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

在前几天的文章《为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?》中,我曾经对几款属性拷贝的工具类进行了对比。然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。这一篇文章就来简单介绍下MapStruct的用法,并且再和其他几个工具类进行一下对比。为什么需要MapStruct ?首先,我们先说一下MapStruct这类框架适用于什么样的场景,为什么市面上会有这么多的类似的框架。在软件

2020-08-12 16:25:46 108

原创 如何去掉 list 集合中重复的元素

在实际开发的时候,我们经常会碰到这么一个困难:一个集合容器里面有很多重复的对象,里面的对象没有主键,但是根据业务的需求,实际上我们需要根据条件筛选出没有重复的对象。比较暴力的方法,就是根据业务需求,通过两层循环来进行判断,没有重复的元素就加入到新集合中,新集合中已经有的元素就跳过。操作例子如下,创建一个实体对象PenBean,代码如下:/** * 笔实体 */public class PenBean { /**类型*/ private String type; /**

2020-08-12 15:01:15 1528

原创 外观模式—门面模式

上面是外观模式的基本调用逻辑图,外观模式就是怎么把多个子系统的接口合并成一个接口供客户端调用,就是所谓的“套餐”,就是底层细粒度接口的不同组合。在保留底层接口不变的前提下,中间层为调用方提供了便利。这正是外观模式(Facade Pattern)的设计思想:为了使复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。上图中,几个SubSystem类对应着我们刚才所说的底层基础功能,而Facade类对应着中间层,为调用方提供“套餐”服务。代码实现:public class Sub.

2020-08-10 09:58:21 96

转载 分布式 Session 解决方案

分布式Session一致性?说白了就是服务器集群Session共享的问题Session的作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。分布式Session存在的问题

2020-07-25 18:16:48 113

原创 Ubuntu18.04下安装MySQL

提示:以下操作均在root用户下进行,如在普通用户,请自行加上sudo!查看有没有安装MySQL:dpkg -l | grep mysql安装MySQL:apt install mysql-server安装完成之后可以使用如下命令来检查是否安装成功:netstat -tap | grep mysql通过上述命令检查之后,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。登录mysql数据库可以通过如下命令:mysql -u root -p-u 表示选择登陆

2020-07-17 13:49:43 985

原创 太逗了,面试官让我讲线程 WAITING 状态!

太逗了,面试官让我讲线程 WAITING 状态!

2020-07-11 17:02:56 135

转载 分布式事务TCC结合业务说明

一、业务场景介绍咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。那对一个订单支付之后,我们需要做下面的步骤:更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。二、进一步思考好,业务场景有了,现在我们要更进一步,实现一个TCC分布式事务的效果。什么意思呢?也就是说,订单服务-修改订单状态,库存服务-扣减库存,积分服务-增加积分,仓储服务-创建销售出库单。上述这几个步

2020-07-11 16:57:14 306

转载 观察者模式

设计模式中的 “观察者模式”

2020-07-07 14:11:46 103

转载 直接干掉 RESTful:GraphQL 是真的香!

GraphQL 是真的香

2020-07-07 10:40:36 317

转载 java执行反射代码导致频繁创建奇怪的类从而发生元数据区被占满FUllGc案例

查看 JVM GC 日志没有一丝耽搁,老王立刻调出了线上GC日志,在日志里,看到了一个“Metadata GC Threshold”的字样,类似于如下日志:【Full GC(Metadata GC Threshold)xxxxx, xxxxx】通过GC日志,老王立即定位到这次频繁的Full GC,实际上是JDK 1.8以后的Metadata元数据区导致的。奇怪了,Metadata区域一般是放一些加载到JVM里去的类,为什么会被频繁的塞满,进而触发Full GC呢?老王陷入了沉思,一旁的小猛和彪

2020-07-03 13:49:07 3130 2

转载 Centos7安装docker

一、安装docker1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本 $ uname -r2、使用 root 权限登录 Centos。确保 yum 包更新到最新。$ sudo yum update3、卸载旧版本(如果安装过旧版本的话)$ sudo yum remove docker docker-common docker-selinux doc

2020-06-30 10:44:51 115

转载 HTTPS 的工作原理

当你打开浏览器,访问某个网站,如果网址旁有个小锁,代表访问的网址是安全的,反之不安全。当我们没有看到那个小锁的小图标的时候,需要提高警惕,不要随意输入个人重要的资料。所有的银行和支付相关的网站都是100%使用HTTPS的。我们为什么需要HTTPS?主要有三个原因:保护隐私(Privacy):所有信息都是加密传播,第三方无法窃听数据。如果使用HTTP明文传输数据的话,很可能被第三方劫持数据,那么所输入的密码或者其他个人资料都被暴露在他人面前,后果可想而知。数据完整性(Integraty):一旦第三方

2020-06-18 10:36:52 542

转载 如果项目今后需要扩展,那么可以考虑不要使用lombok

我承认,Lombok是一个很不错的Java库,它可以让你在少写代码的同时耍耍酷,简单的几个注解,就可以干掉一大片模板代码。但是,所有的源代码很多时候是用来阅读的,只有很少的时间是用来执行的(你可以细品这句话)。一年以前,我和大多数人都认为Lombok的出现会让Java的编码体验会更好,并极力的在我的团队中推荐使用Lombok。一年以后,我开始对此产生顾虑,尤其是在我准备为开源的博客系统Una-Boot升级Java版本时,我才意识到Lombok自己掉入了一个戏法陷阱。在我进一步分析其源代码并理解相关注

2020-06-18 09:42:35 571 3

转载 想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做

想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做

2020-06-15 15:39:21 318

转载 高并发下,你都怎么选择最优的线程数

为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务。并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行。在高并发的情况下采用线程池,可以有效降低线程创建释放的时间花销及资源开销,如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及“过度切换”(在JVM中采用的处理机制为时间片轮转,减少了线程间的相互切换) 。但是有一个很大的问题摆在我们面前,即我们希望尽可能多地创建任务,但由于资源所限我们又不能创建过多的线程。那么在高并发的情况下,我们怎么选择最优的线程数量呢?选

2020-06-15 15:00:32 1846 1

转载 HashMap 这一篇就够了

二狗:先来点简单的,介绍下 HashMap 的底层数据结构吧。囧辉:我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。二狗:为什么要改成“数组+链表+红黑树”?囧辉:主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。二狗:那在什么时候用链表?什么时候用红黑树?囧辉:对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后达到9个(阈值

2020-06-12 17:57:07 353

转载 Java GC:干掉 cms,zgc 才是未来

JAVA程序最爽的地方是它的GC机制,开发人员不需要关注内存申请和回收问题。同时,JAVA程序最头疼的地方也是它的GC机制,因为掌握JVM和GC调优是一件非常困难的事情。在ParallelOldGC、CMS、G1之后,JDK11带来的全新的「ZGC」为我们解决了什么问题?Oracle官方介绍它是一个Scalable、Low Latency的垃圾回收器。所以它的目的是「降低停顿时间」,由此会导致吞吐量会有所降低。吞吐量降低问题不大,横向扩展几台服务器就能解决问题了啦。ZGC目标如下图所示,ZGC的目标主

2020-06-09 10:56:36 182

转载 《Spring 设计思想》AOP 设计思想与原理

Spring 提供了AOP(Aspect Oriented Programming) 的支持, 那么,什么是AOP呢?本文将通过一个另外一个角度来诠释AOP的概念,帮助你更好地理解和使用Spring AOP。1. Java程序运行在JVM中的特征当我们在某个类Foo中写好了一个main()方法,然后执行java Foo,你的Java程序之旅就开启了,如下:那么在这个执行的过程中,JVM都为你干了什么呢?当你执行java Foo 的时候,JVM会创建一个主线程main,这个主线程以上述的main()

2020-06-08 20:14:25 265

转载 9种分布式ID生成方式

一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID?拿MySQL数据库举个栗子:在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯

2020-06-04 20:17:38 212

原创 虚拟机扩容磁盘创建分区

虽然已经扩大了磁盘,但是由于还没有经过分区,指定文件系统,所以linux操作系统无法识别(其实就相当于你的硬盘虽然大了,但是你并没有对其进行分区是一个道理)。下面我们进行分区处理。分区:fdisk命令: fdisk -l :打印当前的磁盘分区表,这时我们可以看到磁盘的总量但是分区只有以前的那几个原有的分区。键入命令:fdisk /dev/sda “sda就是经过扩容的硬盘,为SCSI硬盘,IDE类型硬盘对应为hda,是对该硬盘进行操作”键入 : m “ 列出fdisk的帮助”我

2020-06-04 11:11:09 1266

转载 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 使用详解

现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高…这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。一、 jps(Java Virtual Machine

2020-05-25 10:36:04 258

转载 Spring 异步调用,一行代码实现!舒服,不接受任何反驳~

1. 概述在日常开发中,我们的逻辑都是同步调用,顺序执行。在一些场景下,我们会希望异步调用,将和主线程关联度低的逻辑异步调用,以实现让主线程更快的执行完成,提升性能。例如说:记录用户访问日志到数据库,记录管理员操作日志到数据库中。异步调用,对应的是同步调用。同步调用:指程序按照 定义顺序 依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用:指程序在顺序执行时,不等待异步调用的语句返回结果,就执行后面的程序。考虑到异步调用的可靠性,我们一般会考虑引入分布式消息队列,例如说 R

2020-05-22 18:48:04 532

转载 Spring Boot 监听 Redis Key 失效事件实现定时任务

业务场景我们以订单功能为例说明下:生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。方式可能有很多,在这里介绍一种监听 Redis 键值对过期时间来实现订单自动关闭。实现思路在生成订单时,向 Redis 中增加一个 KV 键值对,K 为订单号,保证通过 K 能定位到数据库中的某个订单即可,V 可为任意值。假设,生

2020-05-21 16:27:39 210

原创 Nginx配置请求转发到spring-boot-admin

我的spring-boot-admin的实际地址是47.56.190.83:8888,由于47.56.190.83的8888端口没有放开,所有想使用nginx的8080端口转发请求,由于通过这种方式相关的Spring-Boot-Admin的css、js、png等静态资源无法加载,所有通过以下配置即可: server { listen 8080; server_name localhost; #charset koi8-r;

2020-05-20 12:26:00 3355 4

转载 kill -9的原理都不知道就敢到线上执行?明天不用来了!

相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌握常用的Linux命令也是程序员必备的技能。但是,怕就怕很多人对于部分命令只是一知半解,使用不当就能导致线上故障。前段时间,我们的线上应用报警,频繁FGC,需要紧急处理问题,于是有同事去线上重启机器(正常程序应该是先采集堆dump,然后再重启,方便排查是否存在内存泄露等问题)。但是在重启过程中,同事发现正常的重启命令应用无反应,然后尝试使用kill命令"杀"掉Java进程,但是仍然无效

2020-05-15 15:30:09 185

原创 我用的最多的三种模式

策略模式关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。我们以发奖励为例进行讲解,比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,虚拟币和现金等。在存储时,我们必然会使用一个类似于type的字段用于表征这几种发放奖励的,那么这里我们就可以使用多态的方式进行奖励的发放。比如我们抽象出一个PrizeSender的接口,其声明如下:public interface PrizeSender { /** *

2020-05-15 15:04:16 217

转载 一手好 SQL 是如何炼成的

MySQL性能最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。微信搜索web_resource 关注获取更多推送。博主曾经操作过超过4亿行数据的单表,分页查询最新的20条记录耗时0.6秒,SQL语句大致是se

2020-05-10 16:40:17 218

原创 linux纠正时区

Linux修改时区的正确方法CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件[root@centos7 ~]# ll /etc/localtimelrwxrwxrwx 1 root root 33 Oct 12 11:01 /etc/localtime -> /usr/share/zoneinfo/As...

2020-05-07 11:46:36 195

转载 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!

Dataway介绍Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具,使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布,一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。这种内嵌集成方式模式的优点是...

2020-05-01 12:21:41 143

机房管理系统

机房管理系统主要实现学校对机房的合理管理,对机房的课程进行详细调整

2015-03-20

基于jsp的个人理财管理系统

主要实现基于jsp的个人理财管理系统,实现对自己的财物进行规划。

2015-03-20

基于SSH的Web理财管理系统

界面丰富、基于jsp的开发,更使用了SSH的技术开发,数据库文件和代码齐全。

2015-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除