自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 SpringCloud Gateway 使用 Nacos 注册的服务名称做路由转发报503 Service Unavailable

SpringCloud Gateway 使用 Nacos 注册的服务名称做路由转发报503 Service Unavailable今天基于最新版本的SpringBoot、SpringCloud、SpringCloud Alibaba 版本写了个demo,集成gateway使用nacos注册的微服务名称做路由转发时一直报“503 Service Unavailable”版本SpringBoot: 2.6.4SpringCloud: 2021.0.1SpringCloud Alibaba: 20

2022-03-25 15:05:56 1372 2

原创 SpringBoot 自定义logback.xml打印日志

SpringBoot 自定义logback.xml打印日志pringBoot默认的日志组合为slf4j + logback,但是默认配置是日志只输出在控制台,在实际项目中我们需要输出到指定的log文件才便于日后的日志定位。实践在无任何配置的前提下,只要我们引入了SpringBoot的包,就可以直接使用日志的功能。SpringBoot会默认去加载resources下名为logback.xml 或者 logback-spring.xml的配置文件自定义logback.xml文件:

2022-03-21 16:57:43 2212

原创 SpringBoot+Mybatis整合多数据源

SpringBoot+Mybatis整合多数据源在实际项目开发中,不免会遇到需要一套程序需要操作多个数据库的场景,这时候多数据源就派上用场了。项目结构引入Maven依赖包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs

2022-03-21 16:09:55 1316

原创 使用docsify搭建在线文档中心

准备工作1、电脑已安装好node 和npm 环境。2、编辑Markdown文件推荐下载Typora。Typora官网3、对Markdown语法有一定的了解。可参考:Markdown语法教程docsify安装官网:https://docsify.js.org1、通过npm全局安装docsify-cli工具npm i docsify-cli -g2、初始化项目docsify init ./docs3、启动服务docsify serve docs# 默认端口3000# 若启动

2022-03-15 20:48:41 2521

原创 必备软件记录

工具类1、解压工具:Bandizip、7-zip2、截图:Snipaste3、录屏:Bandicam4、文件比较器:Beyond Compare5、文件搜索:Everything6、视频播放器:Potplayer7、下载器:IDM8、Markdow编辑器 + 图床:Typora + PicGo9、全局插件:uTools10、图片查看:2345看图王11、浏览器:Chrome12、软件卸载:GeekUninstaller13、思维导图:XMind、MindMasterChrome浏

2022-03-11 09:07:53 136

原创 项目实践之使用Arthas定位服务性能问题

前言Arthas 是Alibaba开源的Java诊断工具官方文档: https://arthas.aliyun.com/doc/一、问题背景本人负责的一个服务中有一个数据导出的功能,在数据量为5w条,大小约为120M时,导出时间约为5min,时间太慢,无法接受。二、定位过程1、梳理代码,寻找是否有可以优化的地方;通过梳理代码,对代码中的分页查询进行了优化,但是提升不明显。2、使用Arthas工具查看每个方法的耗时,查看是否有异常耗时;因为我们的服务都是通过k8s托管,每个服务是一个pod,

2021-12-23 11:39:32 787

原创 剖析Kafka到底会不会丢消息?

前言消息传递语义:at most once:最多一次。消息可能丢失也可能被处理,但最多只会被处理一次。at least once:至少一次。消息不会丢失,但可能被处理多次。可能重复,不会丢失。exactly once:精确传递一次。消息被处理且只会被处理一次。不丢失不重复就一次。kafka有三次消息传递的过程:生产者发消息给 kafka brokerkafka broker 消息同步和持久化kafka broker 将消息传递给消费者在这三步中每一步都有可能会丢失消息。一、生产者

2021-12-21 16:30:05 1320

转载 Redis持久化

一、什么是Redis持久化?持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。二、Redis的持久化机制是什么?各自的优缺点?Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:RDB:是 Redis DataBase 缩写快照RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。优点:1、只有一个文件 dump.rdb,方便持久化。2、容灾性好,

2021-05-18 09:52:09 119

原创 使用python实现的天眼查小工具

#!/usr/bin/python3-- coding: UTF-8 --pip3 install PyMySQLimport tkinter as tkimport pymysqlimport csvimport oswindow = tk.Tk()window.title(‘天眼查小工具’)window.geometry(‘500x500’)label1 = tk.Label(window, text=“请输入关键字:”)label2 = tk.Label(window, text

2020-12-09 10:33:48 2123 1

原创 Elasticsearch入门

下载es下载地址:Elasticsearch:官方分布式搜索和分析引擎 | Elastic本文针对windows版本。运行elasticsearch.bat启动es:es启动成功后,在浏览器访问http://localhost:9200/启动成功!下载elasticsearch-head下载地址:https://github.com/mobz/elasticsearch-head进入目录,打开cmd终端:npm install -- 安装依赖npm run start -

2020-12-09 09:57:29 156

原创 Elasticsearch核心概念介绍

Elasticsearch核心概念介绍1、集群Cluster一个或者多个安装了 es 节点的服务器组织在一起,就是集群,这些节点共同持有数据,共同提供搜索服务。一个集群有一个名字,这个名字是集群的唯一标识,该名字成为 cluster name,默认的集群名称是 elasticsearch,具有相同名称的节点才会组成一个集群。在集群中,节点的状态有三种:绿色、黄色、红色:绿色:节点运行状态为健康状态。所有的主分片、副本分片都可以正常工作。黄色:表示节点的运行状态为警告状态,所有的主分片目前都可以

2020-12-05 15:38:56 168

原创 k8s之kubectl常用命令

在日常工作天天都要使用到kubect相关的命令,在此记录下一些常用的命令以及使用的技巧。1、kubectl概述​ kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl本质上是通过命令行参数转换为对API Server的rest api 调用,并将结果输出。2、资源对象类型以下是kubectl支持的资源类型,以及他们的缩略别名:资源对象类型缩略别名apiservices-.

2020-11-27 17:02:01 500

原创 Linux六种进程状态R、S、D、T、Z、X

R - 可执行状态​ 只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。 很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为 TASK_RUNNING状态。 Li

2020-11-26 15:51:17 2378

原创 Golang - init()函数

基础概念所有包都可以包含一个 init 函数。init 函数不应该有任何返回值类型和参数,在我们的代码中也不能显式地调用它。init 函数的形式如下:func init(){ }init 函数可用于执行初始化任务,也可用于在开始执行之前验证程序的正确性。包的初始化顺序如下:首先初始化包级别(Package Level)的变量紧接着调用 init 函数。包可以有多个 init 函数(在一个文件或分布于多个文件中),它们按照编译器解析它们的顺序进行调用。如果一个包导入了另一个包,会

2020-11-24 14:26:16 228

原创 使用pyinstaller将python程序打包成exe可执行文件

介绍pyinstaller 工具可以直接将python程序直接打包成可双击直接运行的文件安装pyinstallerpip install pyinstaller使用pyinstaller -F xxxx.py进入dist/目录下,会发现生成了一个exe可执行文件,该文件可以直接在windows上双击运行。...

2020-11-24 14:00:12 164

原创 分布式锁的三种实现方式

前言:分布式应该具备的条件:在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行高可用的获取锁与释放锁高性能的获取锁与释放锁具备可重入性具备锁失效机制,防止死锁具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。分布式锁的三种实现方式:基于数据库基于缓存(Redis等)基于Zookeeper一、基于数据库的实现方式悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where

2020-11-13 11:43:25 247

原创 编写Python脚本调用企查查股东信息接口将数据导出为excel文件

1、设置IP白名单IP获取建议使用百度搜索:2、获取我的key及我的密钥替换程序中的我的key及我的密钥3、准备公司名称excel将excel放在程序同一目录下,修改文件名为companyName.xlsx,也可以修改代码中的文件名为你的excel文件名,建议文件名为全英文。4、运行程序前提:1、安装python3.0以上:https://www.runoob.com/python3/python3-install.html2、安装代码使用到的函数库:pip3

2020-11-04 09:44:24 5342 8

转载 分布式事务的四种解决方案

原文地址:https://www.cnblogs.com/mayundalao/p/11798502.html简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事.

2020-11-02 14:42:04 212

原创 Spring Cache 集成 Caffeine实现项目缓存

一、前言Spring Cache本身是Spring框架中一个缓存体系的抽象实现,本身不具备缓存能力,需要配合具体的缓存实现来完成,如Ehcache、Caffeine、Guava、Redis等。二、缓存注解@EnableCaching:开启缓存功能@Cacheable:定义缓存,用于触发缓存@CachePut:定义更新缓存,触发缓存更新@CacheEvict:定义清楚缓存,触发缓存清除@Caching:组合定义多种缓存功能@CacheConfig:定义公共设置,位于class之上三、实战

2020-10-30 10:53:58 3361 3

转载 分布式系统ID生成方法

原文地址:https://www.cnblogs.com/captainad/p/10954331.html前言一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给予太多的关注。但是对于大厂的那种大规模复杂业务、分布式高并发的应用场景,显然这种ID的生成方式不会像小项目一样仅仅依靠简单的数据自增序列来完成,而且在分布式环境下这种方式已经无法满足业务的需求,不仅.

2020-09-23 11:30:27 124

原创 RabbitMQ的基本组成及概念

RabbitMQ的架构如图:Producer:生产者,投递消息。Consumer:消费者,接收消息。Broker:RabbitMQ集群中的一个服务节点或RabbitMQ服务实例。Queue:队列。RabbitMQ的内部对象,用于存储消息。RabbitMQ中消息只能存储在队列中,而kafka是将消息存储在topic中的partition中。Exchange:交换器。生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中,如果路由不到,可能会返回给生产者,也可能直接丢弃。

2020-09-22 13:49:36 1050

转载 Zookeeper到底是干什么的?

原文地址:https://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.htmlZookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多。今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作.

2020-09-21 18:37:06 788

原创 Kafka的基本组成及概念

Broker:一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic,Broker和Broker之间得地位是基本平等的。Topic:每条发送到Kafka集群的消息都属于某个主题,这个主题就称为Topic。物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存在一个或多个Broker上,但是用户只需指定消息的主题Topic即可生产或者消费数据而不需要关心数据存放在何处。Partition:为了实现可扩展性,一个Topic可以被

2020-09-21 15:33:37 719

原创 SpringBoot整合kafka

前言安装kafka,版本为2.6.0安装zookeeper,版本为3.6.2启动kafka启动zookeeperSpringBoot版本2.3.1.RELEASE核心目录结构KafkaConsumer.java 消费者KafkaProducerController 生产者application.yaml 主配置文件application-kafka.properties kafka配置文件代码pom依赖<dependency> <gr

2020-09-19 18:12:40 175

原创 Docker数据持久化

容器中数据持久化主要有两种方式:数据卷数据卷容器数据卷数据卷是一个可供一个或多个容器使用的特殊目录数据卷可以在容器之间共享和重用读数据卷的修改会立马生效对数据卷的更新,不会影响镜像数据卷默认会一直存在,即使容器被删除一个容器可以挂载多个数据卷挂载宿主机目录作为数据卷-v 参数docker run -v /host-dir:/container-dir ${image}这样可以将宿主机的/host-dir路径加载到容器的/container-dir中。这样在容器中产生的数

2020-09-17 17:29:25 141

原创 Dockerfile指令详解

ADD复制文件从src⽬录复制⽂件到容器的dest。其中src可以是Dockerfile所在⽬录的相对路径,也可以是⼀个URL,还可以是⼀个压缩包示例:AAD SpringBoot-Demo.jar app.jarARG设置构建参数类似于ENV,ARG设置的是构建时的环境变量,在容器运行时是不存在这些变量的。而用户可以在构建期间使用docker build命令和参数--build-arg=对这个变量复制。如果你再Dockerfile中使用ARG定义了变量但未给出初始值,在docker bui

2020-09-17 14:52:39 163

原创 Docker核心原理

一、Docker的底层实现​ Docker容器本质上是宿主机上的进程 ,核心技术包括Linux上的命名空间(namespace)、控制组(cgroups)、UnionFS(联合文件系统)和容器格式(Container format)。Docker通过namespace实现了资源隔离,通过cgoups实现了资源限制,通过写时复制机制实现了高效的文件操作。​ 容器就是一个与宿主机系统共享内核但与系统中的其他进程资源相隔离的执行环境。Docker通过对namespace、cgroups、capabilit

2020-09-15 17:04:54 480

原创 SpringBoot项目实战经验之读取配置文件属性值的四种方式

方式一@Value("${xxx}")此方式一般多用于读取较少数量或没有相同前缀的属性值。实例:// 新建一个配置文件application-test.propertiesage=25address=nanjing // 在application.yml主配置文件中激活test配置文件,否则获取不到spring: profiles: active: test@RestController@RequestMapping("/v1")public class Re

2020-08-28 09:35:01 1220

原创 hibernate-validator扩展自定义注解校验请求参数及请求体

SpringBoot项目中一般使用hibernate-validator来对请求参数进行校验,但hibernate-validator提供的注解有限,有时候需要根据具体业务扩展自定义注解对参数进行校验。前言:在实际运用中,hibernate-validator的注解分为校验单个的参数及整个实体类,两个校验的情况在处理上有一些差别,下面分开讲解。校验单个参数自定义注解模拟对Id进行校验@Documented@Constraint(validatedBy = IdCheck.IdValidat.

2020-08-21 15:42:08 823

原创 Java并发编程之synchronized关键字解析

Synchronized的应用synchronized关键字最主要有以下3种应用方式:修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。Synchronized的作用原子性:确保线程互斥的访问同步代码;可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中

2020-08-18 15:20:11 182

原创 Java并发编程之volatile关键字解析

前言在并发编程中,我们主要围绕着以下三个问题:原子性问题:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。可见性问题:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。有序性问题:程序执行的顺序按照代码的先后顺序执行要想保证并发程序能正确的运行,必须要保证以上三个问题,只要有一个没保证,就可能会发生错误。JAVA内存模型Java内存模型规定所有的变量存储在主内存中,每个线程都有自己的工作内存。线程对变量的所有操作都

2020-08-12 16:17:39 208

原创 SpringBoot项目实战经验之Filter实现自定义过滤器

Servlet包中提供了Filter接口供我们实现自定义过滤器。自定义拦截器可以参考我之前的文章https://blog.csdn.net/King__Cheung/article/details/107781774。与之不同的是,拦截器是Spring框架提供的功能,而Filter过滤器是Servlet提供的。下面是拦截器与过滤器的一些主要区别:Filter由Servlet包提供,只能用于Web应用,不能使用Spring容器资源;拦截器由Spring提供,既能用于Web应用,也能用于Appli..

2020-08-05 11:25:45 652

原创 SpringBoot项目实战经验之ApplicationEvent+@EventListener实现自定义监听器

Spring中提供了ApplicationEvent+@EventListener注解可以实现自定义事件监听,是基于_观察者模式_的。组成要素自定义事件自定义监听器发布事件自定义事件继承ApplicationEvent,自定义Event/** * @Author zhangting * @Desc 自定义事件 * @Date 2020/08/04 **/@Setter@Getterpublic class MyEvent extends ApplicationEven.

2020-08-04 16:03:51 709 1

原创 SpringBoot项目实战经验之HandlerInterceptorAdapter实现自定义拦截器

SpringBoot中提供了HandlerInterceptorAdapter适配器供我们自定义拦截器,可以拦截自定义或所有的请求做相应的处理。HandlerInterceptorAdapter中共有四个方法:preHandle :在Controller方法被调用前执行postHandle :在Controller方法调用后执行afterCompletion :在整个请求处理完成之后执行afterConcurrentHandlingStarted :用来处理异步请求,当Controller中.

2020-08-04 10:59:05 1514

原创 SpringBoot项目实战经验之@ControllerAdvice+ResponseBodyAdvice实现响应体全局统一处理

在实际项目开发中,经常需要对向前台返回的响应体进行处理,例如包装为通用返回类型等。Spring中提供了 @ControllerAdvice+ResponseBodyAdvice 的解决方案 对响应体进行全局统一处理,可以避免在controller层对业务代码入侵。代码示例/** * @Author zhangting * @Desc 响应body全局统一处理 * @Date 2020/07/29 **/@Slf4j@ControllerAdvice(basePackages = "com.

2020-07-29 15:31:21 1182

原创 SpringBoot项目实战经验之@ControllerAdvice+RequestBodyAdvice实现请求体全局统一处理

在实际项目开发中,经常需要对前台发来的请求body进行处理,例如参数过滤,参数校验,不合法参数拦截,参数解密等等。Spring中提供了 @ControllerAdvice+RequestBodyAdvice 的解决方案 对请求进行全局统一处理,可以避免在controller层对业务代码入侵。注意:该方法只对使用了@RequestBody注解的参数生效,本质上是AOP,获取的是在请求头中的属性,如果通过GET请求方式,例如http://localhost:8080/xx?id=1 此种方法,是无法获得i.

2020-07-29 14:41:15 2940 5

原创 SpringBoot项目实战经验之@ControllerAdvice+@ExceptionHandler实现全局异常统一处理

注解@ControllerAdvice(或@RestControllerAdvice)本质上是Component,会被当做组件扫描。一般配合@InitBinder、@ModelAttribute、@Exception来使用,实现以下三个方面的功能:1、全局数据预处理2、全局数据绑定3、全局异常处理今天我们主要介绍第三种功能,在平时的项目中使用的比较广泛,可以实现在后台业务处理时抛出自定义错误,传回前台,此时前台就可以友好的将错误提示给用户。@ExceptionHandler(“异常类名”)

2020-07-24 15:48:12 427

空空如也

空空如也

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

TA关注的人

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