自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

弹指天下

学而不思则罔,思而不学则殆

原创 Spring boot + RabbitMQ延迟队列实战

一、背景延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费。那么,为什么需要延迟消费呢?我们来看以下的场景:订单业务: 在电商/点餐中,都有下单后 30 分钟内没有付款,就自动取消订单。短信通知: 下单成功后 60s 之后给用户发送短信通知。失败重试: 业务操作失败后,间隔一定的时间进行失败重试。传统订单处理:采取定时任务轮训数据库订单,并且批量处理。其弊端也是显而易见的;对服务器、数据库性会有很大的要求,并且当处理大量订单起来会很力不从心,而且实时性也

2020-07-23 12:13:19 37

原创 一图搞定MySQL体系架构
原力计划

要了解mysql的运行机制,那么首先要对mysql的体系结构有一定的了解。最近由于一些事,被打击的不轻,感觉自己可能再怎么努力,职业生涯也就这样了。所以对专研技术、写博客突然丧失了原来的激情。但不管怎样,路是自己选的,哭着也要走完。何况,目前好像也没有其他路可走。mysql体系结构由图,可以看出MySQL由一下几部分组成:连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲(Cache)组件插件式存储引擎物理文件说明:MySql数据库区别于其他数据库的.

2020-07-05 19:23:36 67

原创 5分钟,使用yum方式完成mysql安装
原力计划

跟着老万,教你5分钟使用yum方式安装mysql。最近打算写一些关于mysql的系列文章,作为第一篇,来教大家如何快速的使用yum命令在线安装mysql。卸载旧的mysql版本rpm -qa | grep MySQL查看之前安装的 MySQL使用:rpm -e xxxxxxxxxxxxx # 卸载所有 MySQL 服务查看残留 MySQL 文件:find / -name MySQLRm -rf 文件 # 删除残留文件...

2020-06-27 23:27:55 120

原创 mysql中文全文检索从入门到放弃
原力计划

背景中文全文检索实战坑放弃

2020-06-17 22:47:46 180

原创 spring boot中通过注解@Bean声明的bean的名称是什么?
原力计划

问题spring boot中我们常常会在configuration类中通过@Bean注解去声明Bean。但是很多人不清楚默认情况下,通过@Bean注解声明的Bean的名称是什么?请问,如下代码声明bean的名称是什么?@Configurationpublic class LogAutoConfigure { @Bean public Queue queueTest() { return new Queue("log-queue", true); }}为

2020-06-15 23:36:22 882

原创 Spring boot属性文件加载和生效顺序深度分析
原力计划

spring boot最核心的特性就是自动化配置,我们在学习spring boot的时候,首要需要了解它的自动化配置原理,其次是属性文件的加载顺序,我认为这两点是学习spring boot的重中之中。网上介绍spring boot属性文件的加载顺序的文章很多,但都没有从源码上深入分析。今天和大家一起通过源码探究,spring boot属性文件的加载顺序。这里说明一个观点,先加载的属性未必会生效,后加载的属性未必一定会覆盖先加载的属性值。是不是感觉很玄学,很佛系。...

2020-06-09 23:18:06 207

原创 给你的SpringBoot工程打的jar包瘦瘦身
原力计划

Spring boot默认方式打包,由于打的是全量依赖包(也称为fat包),不但打包慢,体积大,传输也慢,今天教大家给spring boot瘦瘦身。背景现在微服务架构越来越流行,一个项目10多个基于spring boot的服务模块很常见。假设一个服务模块打成jar包是100M,那么一次全量发布可能就需要上传1G的文件。在网络情况好的时候可能还没多大感觉,但如果是代码需要拷贝到内网发布,或者上传到某些国外服务器上, 将严重影响工作效率。那么,有没有什么办法给我们打的spring boot的jar包瘦.

2020-05-31 01:18:29 1181 8

原创 工作8年的普通专科生程序员的一些感悟
原力计划

不知道从何时起,互联网圈充斥着各种年薪百万,仿佛走上了软件开发行业,就都能拿到高薪,走向人生巅峰一样。作为一个最普通的专科毕业的程序员,给大家分享下自己8年工作生涯的一些感悟和总结。还记得自己刚开始进入软件开发行业的时候,也是在网上看了好多大佬的工作总结,每次看完总是踌躇满志,像打了鸡血一样充满干劲。所以这也是我的博客ID命名为斗者_2013的原因。斗者,与天斗,其乐无穷;与地斗,其乐无穷;与人斗,其乐无穷。2013年,算是我正式踏上软件开发的第二年。时间过的真的很快,转眼进入软件开发行业8年了.

2020-05-28 00:27:23 28870 226

原创 Spring boot前后端分离后,跨域问题怎么解决?
原力计划

现在基于spring boot前后端分离的开发模式越来越普遍,那么,由于前后端分离引发的跨域问题,你知道怎么解决吗?什么是跨域跨域是指 不同域名之间相互访问。即浏览器控制当前网页下不能执行其他网站的脚本,这是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。也就是如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。同源策略同源策略/S.

2020-05-20 02:40:22 1572

原创 Spring boot随机端口你都不会,怎么动态扩容?
原力计划

一般情况下每个spring boot工程启动都有固定的端口,但是在微服务领域,服务的多实例扩容部署是非常常见的,如果在一台服务器上需要对同一个服务进行多实例,就会出现端口冲突,那么怎么解决这个问题呢?–答案是随机端口random随机端口在spring boot中,可以通过${random}来生成随机数字,我们可以在配置文件中,这么设置端口:server.port=${random.int(2000,8000)}通过random.int方法,指定生成2000~8000的随机端口。这样每次启动的端.

2020-05-19 01:59:56 4122 13

原创 小白都能听懂的spring boot自动化配置原理
原力计划

spring boot最核心的特性就是他的自动化配置特性,极大的减少了构建一个spring web工程的工作量。那么你知道spring boot自动化配置的原理吗?先直接自定义一个user-spring-boot-starter组件,感受下自动化配置的魅力。构建user-spring-boot-starterpom依赖 <parent> <groupId>org.springframework.boot</groupId> .

2020-05-16 01:42:14 1161

原创 redis缓存解耦详解
原力计划

redis是现在最主流的缓存利器,但是你的项目中,缓存真正做到了解耦了吗?背景最近,项目中遇到一个redis缓存使用的问题,当redis连接不上时,直接导致业务异常。redis不是做为缓存使用吗?当缓存中查询不到,不是应该主动从数据库加载吗?最后发现是利用RedisTemplate操作缓存,没有进行异常捕捉处理,导致异常抛出影响到业务的正常执行。那么,你的项目中,缓存操作真的做到了解耦吗?缓存原理缓存的使用目前redis缓存主要有2种使用方式:方式一:结合Spring Cache使用,.

2020-05-12 11:50:07 1049 2

原创 Spring Boot之全局异常处理:404异常为何捕获不到?
原力计划

Spring Boot有很多非常好的特性,可以帮助我们更快速的完成开发工作。今天和大家聊聊Spring boot的全局异常处理。问题1、spring boot中怎么进行全局异常处理?2、为什么我的404异常捕获不到?3、常见的http请求异常,能统一封装成json返回吗?实战说明项目依赖包:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>

2020-05-10 20:54:45 898

原创 RabbitMQ中真的只有四种交换器吗?
原力计划

微信公众号:跟着老万学java欢迎关注,了解更多编程技巧,一起交流,一起成长。如果大家看了我之前的文章,应该都知道,rabbitmq中常用的交换器有4中,分别是:direct、fanout、topic、headers。那么rabbitmq中,真的只有4中交换器吗?今天和大家一起研究下。一个简单的方式,通过启动rabbitmq_management插件,在管理控制台去尝试创建excha...

2020-05-08 02:32:32 503

原创 使用RestTemplate进行restful调用,你真的会了吗
原力计划

微信公众号:跟着老万学java欢迎关注,了解更多编程技巧,一起交流,一起成长。RestTemplate是一种更优雅的调用RESTful服务的方式,并且能结合Ribbon一起使用。概述spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较...

2020-05-02 14:51:48 332

原创 数据库连接池大小设置,你学会了吗
原力计划

微信公众号:跟着老万学java关注可了解更多的开发技巧。问题或建议,请公众号留言;背景工作这么多年,数据库连接池用了很久了,但是前几天突然被同事问到:“数据库连接池的大小怎么配?”,突然感觉心里慌的一逼,作为这么多年编程经验的老鸟,绝逼不能承认说自己不会,只能淡定的说:测试环境并发少,巴拉巴拉……,所以可以配置少点;生产环境并发高,所以数据库连接池的连接数要配置的多点。然后在小弟崇拜...

2020-04-27 23:14:17 155

原创 RabbitMQ入门知识整理
原力计划

微信公众号:跟着老万学java关注可了解更多的开发技巧。问题或建议,请公众号留言;什么叫消息队列消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,...

2020-04-25 23:39:21 220

原创 Mysql 的InnoDB引擎下支持hash索引吗?
原力计划

Mysql 的InnoDB引擎下支持hash索引吗?什么,这个不是很明显支持的吗?还总是被面试官问到hash索引的btree索引有什么区别?那么真的支持吗?场景很多人可能在使用Navicat给表创建索引时会发现,索引方法中支持BTREE和HASH乍一看,很多人的第一反应是,这不是支持hash索引吗?实践那么我们来实践一下。CREATETABLE...

2020-04-19 16:54:07 153

原创 rabbitmq高并发RPC调用,你Get到了吗?

微信公众号:跟着老万学java关注可了解更多的编程技巧。问题或建议,请公众号留言;今天给大家介绍下rabbitmq中很重要的一个功能,RPC调用。RPC,即Remote Procedure Call的简称,也就是远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络的技术。比如两台服务器上的A和B两个应用,需要进行服务接口的相互调用,我们就可以使用RPC实现。比如常...

2020-04-12 23:48:36 478

原创 老万的RabbitMQ知识图谱

微信公众号:跟着老万学java关注可了解更多的编程技巧。问题或建议,请公众号留言;很多技术框架,大家工作几年基本都有过接触,但总是感觉知识点非常零散。形成不了技术体系。最近自己在努力把用一些用过的技术框架,中间件的核心知识点逐渐整理出来,形成知识网图。rabbitmq知识图谱通过整理知识图谱,对整个技术栈的基础知识,核心特性,应用场景,痛点问题,都有了更深刻的认识。感觉是...

2020-04-11 17:47:02 139

原创 老万的java技术书单:你还在吃快餐吗?

简介技术无涯,编码有道大家好,我是多年java开发老兵,非大牛程序猿一枚,人称:老万。开通公众号很久了,一直担心自己没有时间和精力坚持下去,同时也深恐自己的水平还不够,今年痛定思痛,觉得还是要拼一把,“你不努力一下,永远不知道自己有多强大”。内容主要是专注java开发,玩转微服务,记录开发痛点,总结架构经验,尽量分享一些简洁有用的干货,助力大家一起成长。为什么第一篇就分享技术书籍?因为多...

2020-04-11 13:33:06 114

原创 rabbitmq-sharding插件使用

RabbitMQ是非常流行的消息中间件,大家都知道通过集群能够增大它的吞吐量,那么针对单个队列,集群能增大他的吞吐量吗?如果不能,我们要怎么做呢?南山远眺问题RabbitMQ是非常流行的消息中间件,大家都知道通过集群能够增大它的吞吐量,那么针对单个队列,集群能增大他的吞吐量吗?如果不能,我们要怎么做呢?答案是集群并不能的增加单个队列的吞吐量,这是因为RabbitMQ的普通集...

2020-04-06 21:37:58 389

原创 OAuth2.0实战(三)用户信息加载

Spring Security内置了三种用户存储方式:1、基于内存2、基于数据库查询语句3、自定义UserDetailsService服务来获取这里的用户存储指的是,从哪里获取用户的信息1、基于内存存储用户信息在WebSecurityConfig类中配置:@Overrideprotected void configure(AuthenticationManagerBuilder a...

2019-10-13 18:57:31 287

原创 OAuth2.0实战(二)四种认证方式的基本使用

认证方式:authorizedGrantTypes指的是认证类型,在OAuth2.0里面有以下这几种认证方式。authorization_code 授权码认证client_credentials 客户端认证password 密码认证implicit 隐式授权类型refresh_token 刷新密钥...

2019-10-06 22:27:15 2760

原创 OAuth2.0实战(一) 总纲

OAuth2.0应该是目前微服务架构下最流行的鉴权框架了。接下来,跟着老万学OAuth2.0本套笔记主要以实战为主,通过项目实战说明OAuth2.0的认证原理和一些特性功能的控制。关于OAuth2的理论部分由于网上太多,这里我不会过多的介绍,大家可以自己网上查阅。相关源码都保存在我的Github账号下,都可以下载直接运行。总纲:四种认证方式的基本使用用户信息的数据库加载(包括用户的...

2019-10-06 20:19:18 245

转载 mysqldump定时任务生成备份文件内容为空解决方法

mysqldump定时任务生成备份文件内容为空解决方法2018年05月25日 09:54:13 黄如果 阅读数:20791问题:写好了一个mysqldump备份脚本(如图)直接执行可以正常生成备份文件,但在用crontab运行时却生成内容为空2原因分析:由于mysqldump存在于全局环境变量mysql的bin下面,故在直接运行时可以识别到mysqldump命令,而在crontab里面无法...

2019-05-22 20:02:32 966

原创 mysql中left join的误解及笛卡尔积解释

首先,说下自己一直以来的误区:left join(左外连接)查询,已左表A为基础表,关联右表B查询,最多只会返回A表里面满足条件的记录。这种想法是错误的,返回的记录条数和两表的关联条件有关。比如:select A.id,A.name,B.id,B.name from A left join B on A.name = B.name 如果name在关联表B中不是...

2019-05-20 16:19:26 4041

原创 mysql使用脚本定时进行数据热备份

按照数据库状态划分热备热备份(Hot Backup)是指在数据库运行中直接备份,对正在运行的数据库没有任何影响。冷备冷备份(Cold Backup)是指在数据库停止的情况下进行备份,这种备份最为简单,一般只需要拷贝相关的数据库物理文件即可(由于要在数据库停止的情况下进行备份,所以一般用的非常少)冷备份的优点:1.是非常快速的备份方法(只需拷贝文件)2.容易归档(简单拷贝即可)3....

2019-05-17 11:52:29 579

原创 mysql覆盖索引详解——like模糊全匹配中使用索引

原文地址如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。只扫描索引而无需回表的优点:1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来...

2019-05-06 16:40:48 3437 4

转载 springcloud中微服务的优雅停机

大部分项目部署中,为了方便,可能都直接使用kill -9 服务的pid来停掉服务。但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错。可以采用以下方式来解决:核心是先调用方法主动通知Eureka注册中心服务下线,然后在停掉服务。本文会介绍几种eureka 注册中心服务下线的方式最不可取的就是直接使用kill命令停掉服务。默认情况下...

2019-05-06 16:33:09 603

原创 springcloud中微服务的优雅停机

大部分项目部署中,为了方便,可能都直接使用kill -9 服务的pid来停掉服务。但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错。可以采用以下方式来解决:核心是先调用方法主动通知Eureka注册中心服务下线,然后在停掉服务。本文会介绍几种eureka 注册中心服务下线的方式最不可取的就是直接使用kill命令停掉服务。默认情况下...

2019-04-22 10:48:29 1912

转载 Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程

一、可以使用以下命令查使用内存最多的K个进程方法1:ps -aux | sort -k4nr | head -K如果是10个进程,K=10,如果是最高的三个,K=3说明:ps -aux中(a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分) ps -aux的输出格式如下:USER PID %CPU %MEM...

2019-04-22 10:16:24 897

转载 【死磕Java并发】—–深入分析synchronized的实现原理

记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。诚然,随着Javs SE...

2019-04-17 23:41:08 132

转载 死磕JVM:类加载机制

死磕JVM:类加载机制一、前言在java代码编译后会生成class字节码文件,而在class字节码文件中的描述的各种信息最终都会被加载到jvm中来运行和使用,笔者是在通过阅读周志明的《深入理解Java虚拟机》第二版后,对书中类加载机制相关内容进行归纳、总结、整理后形成的本文,若想深入了解类加载机制或者JVM,笔者建议《深入理解Java虚拟机》是一个好的选择。二、类加载的时机类从被加载到jv...

2019-04-17 23:11:21 86

转载 数据结构算法 - ConcurrentHashMap 源码解析

五个线程同时往 HashMap 中 put 数据会发生什么?ConcurrentHashMap 是怎么保证线程安全的?在分析 HashMap 源码时还遗留这两个问题,这次我们站在 Java 多线程内存模型和 synchronized 的实现原理,这两个角度来彻底分析一下。至于 JDK 1.8 的红黑树不是本文探讨的内容。1. Java 多线程内存模型五个线程同时往 HashMap 中 pu...

2019-04-15 12:00:46 128

原创 数据结构算法 - HashMap 源码解析

思考题:equals 和 == 的区别,hashCode 与它们之间的联系?HashMap 的长度为什么是 2 的幂次?五个线程同时往 HashMap 中 put 数据会发生什么?Hashmap中的hash冲突到底指的是什么?Hashmap进行put操作的时候,会对key值进行比较吗?HashMap中是采用的键值对的方式存储,那么put操作的时候是直接比较key值,相等覆盖,不等新增,...

2019-04-15 02:03:35 163

转载 Spring Cloud源码分析之Eureka篇:服务注册

本章学习的是服务注册逻辑的相关代码,对应用如何将自身信息注册到Eureka进行深入了解,原文地址:https://blog.csdn.net/boling_cavalry/article/details/82861618关于源码版本本次分析的Spring Cloud版本为Edgware.RELEASE,对应的eureka-client版本为1.7.0;源码分析首先回顾com.netflix...

2019-04-10 11:39:49 229

转载 Spring Cloud源码分析之Eureka篇第七章:续约

在文章《Spring Cloud源码分析之Eureka篇第四章:服务注册是如何发起的 》的分析中,我们知道了作为Eureka Client的应用启动时,在com.netflix.discovery.DiscoveryClient类的initScheduledTasks方法中,会做以下几件事:周期性更新服务列表;周期性服务续约;服务注册逻辑;本章学习的是周期性服务续约的相关代码,对应用如何将...

2019-04-10 11:33:44 254

原创 centos上通过ll或者du命令查看文件的大小

通过ll查看文件的大小:可以通过 ll --help查看参数意义# 通过--b指定文件大小显示的单位 ll --b=k /tmp/check_nginx.log ll --b=m /tmp/check_nginx.log ll --block-size=M /tmp/check_nginx.log# 通过-h自动格式化成比较友好的容量单位显...

2019-04-09 11:54:03 1752

原创 使用crontab配合shell脚本定时检测拉起服务

1、新建脚本check_nginx.sh#!/bin/bashAPP_NAME="nginx: master"BIN_PATH="/usr/local/nginx/sbin"#检测方法checkStatus(){ pid=$(ps -ef |grep "$APP_NAME" |grep -v "grep" |awk '{print $2}'); datetime=`date +...

2019-04-04 15:39:18 793

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