自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一只猿的自我修养

欢迎相互交流~~

  • 博客(103)
  • 收藏
  • 关注

原创 适用Java SpringBoot项目的分布式锁

在分布式系统中,常用到分布式锁,它有多中实现方式,如:基于redis,database,zookeeper等。在需要分布式加锁的时候,先通过redisLockRegistry获取到lock对象,然后用lock对象加锁(可以设置等待尝试时间,到点自动放弃,不加时间默认立即放弃),处理完业务之后一定要记得解锁。在需要分布式加锁的时候,先通过jdbcLockRegistry获取到lock对象,然后用lock对象加锁(可以设置等待尝试时间,到点自动放弃,不加时间默认立即放弃),处理完业务之后一定要记得解锁。

2024-02-29 19:03:44 538

原创 Spring Data Envers 数据审计实战2 - 自定义监听程序扩展审计字段及字段值

上篇讲述了如何在Spring项目中集成Spring Data Envers做数据审计和历史版本查看功能。之前演示的是业务表中已有的字段进行审计,那么如果我们想扩展审计字段呢?比如目前对员工表加入了@Audited审计,员工表有个字段为dept_id,为了页面展示更人性化,我想把dept_id关联的部门名称(当时的快照值)也存入审计版本中...

2024-02-05 17:48:01 843 1

原创 Spring Data Envers 数据审计实战

随着各行各业信息化发展,决策者们越来越意识到数据版本追踪的重要性,尤其是上市公司,数据对于他们尤为重要。考虑到研发成本,对重要表单数据支持页面级的修改历史查看、对所有业务数据支持DB级的版本查看是一个不错的选择。对于使用了Spring框架的Java项目而言,Spring Data Envers就是一个非常适合做数据审计的组件。下面我们看看如何在项目中集成Spring Data Envers实现数据审计功能。

2024-02-05 15:38:31 719

原创 云原生架构

这些云原生技术支持对应用程序进行快速、频繁的更改,而不影响服务交付,从而为采用者提供创新的竞争优势。微服务是小型、独立的软件组件,它们共同作为完整的云原生软件运行。提到云原生就必须介绍一个组织 - 云原生计算基金会 (CNCF) ,它是一个开源基金会,可帮助组织启动云原生之旅。CNCF 成立于 2015 年,支持开源社区开发关键的云原生组件,包括 Kubernetes等,很多大型云厂商是该基金会成员,如亚马逊。云原生架构结合了开发团队用来构建和运行可扩展的云原生应用程序的软件组件。这可以长期节省运营支出。

2023-07-28 22:30:34 369

原创 Java的4种内部类的使用方式及适用场景

Java中有四种形式的内部类,在开发的过程中需要理清楚何时使用合适的内部类,内部类用好了可以提高编码效率、更好的实现封装、甚至可以巧妙实现多继承。当然,某些内部类用多了会削弱面向对象的设计思想,所以内部类不可滥用,要清楚各种形式内部类的作用和适用场景。

2023-05-25 19:02:12 2611

原创 国产信创服务器软硬件兼容情况3 --- LoongArch架构

龙芯使用的是LoongArch指令集,该指令集是由龙芯中科自主设计的指令集架构,拥有完全的自主知识产权,但现阶段生态还不够完善,仅支持少量国产软件。

2023-05-22 18:48:34 96

原创 国产信创服务器软硬件兼容情况2 --- x86架构

x86指令集目前生态最为全面,支持绝大部分PC、服务器操作系统和软件...

2023-05-22 18:37:52 583

原创 国产信创服务器软硬件兼容情况1 --- ARM架构

信创,即信息技术应用创新产业,它是数据安全、网络安全的基础,也是新基建的重要组成部分...

2023-05-15 20:16:50 1114

原创 Spring的7种事务传播方式

Spring事务传播行为体现在某个service方法调用另一个service方法,事务该如何进行下去。Spring支持7中事务传播方式...

2022-12-30 14:32:52 2542 3

原创 Redis缓存集群概述

当我们的存取的key到达的时候,Redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。6.当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

2022-11-27 17:37:36 210

原创 缓存穿透、缓存击穿、缓存雪崩及其解决方案

当大量的读、写请求涌向数据库时,磁盘的处理速度与内存显然不在一个量级,因此,在数据库之前加一层缓存,能够显著提高系统的响应速度,并降低数据库的压力。当缓存未命中,查询持久层也为空,可以将返回的空对象写到缓存中,这样下次请求该key时直接从缓存中查询返回空对象,请求不会落到持久层数据库。缓存击穿是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。物理不过期,针对热点key不设置过期时间。

2022-11-27 17:27:01 504

原创 API网关之微服务网关Spring Cloud Gateway与Netflix Zuul

开发过微服务应用的童鞋应该都耳濡目染接触过spring cloud gateway和zuul1、zuul2这些微服务网关框架,那么Spring Cloud Gateway 与 Netflix Zuul 如何选择呢?

2022-11-27 17:14:35 643

原创 API网关之Nginx + Lua网关实战

Nginx+Lua来开发网关的好处是既能满足相对复杂一些的业务逻辑(毕竟Nginx的配置还是有限),又能获得不错的性能(因为离客户端越近,转发链路越短,性能也就越高,而且Lua脚本非常轻量级,资源消耗少)。首先需要写一个Luau脚本,Lua脚本里面写校验token的逻辑。编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替。自带的配置比较基础,难以适应比较复杂的处理,通过。脚本可以加入更加复杂的业务逻辑,比如解析。,其内部集成了大量精良的。

2022-11-27 16:25:19 5215

原创 API网关之Nginx作为网关的优势及实战

Nginx采用的是多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。

2022-11-20 18:13:29 2469

原创 API网关之网关概述、技术选型

的,模式固定我们可以理解为,你的一个客户他发送过来的请求实际上就是那么几种,它的路径、包体大小、请求头等这些都是比较趋向于固定的,很难会有一个客户他的请求是完全随机生成的,这对我们后面针对这种情况做。3. Zuul, Netflix开源,功能丰富,使用Java开发,易于二次开发,需要运行在Web容器中,如Tomcat。API网关有时也叫应用网关、业务网关,是后台接口的统一入口,进入系统的所有请求都要经过API网关。云开发有自己的一套账号身份体系,请求里如果是带有身份信息的,那么网关会对身份进行鉴权。

2022-11-20 18:09:46 763

原创 阿里云架构实战之ALB(应用型负载均衡)介绍与搭建

服务器端负载均衡SLB(Server Load Balancer)是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力,并且可以消除系统中的单点故障,提升应用系统的可用性。阿里云负载均衡SLB分为两类:传统型负载均衡CLB和应用型负载均衡ALB。专门面向七层,提供超强的业务处理性能。单实例每秒查询数QPS(Query Per Second)可达100万次。

2022-11-20 17:42:53 4817

原创 阿里云架构实战之VPC(虚拟专有网络)介绍与搭建

虚拟专有网络VPC是用户或企业专有的云上私有网络,不同的专有网络之间二层逻辑隔离。用户可以完全掌控自己的专有网络,例如选择IP地址范围、配置路由表和网关等,用户可以在自己定义的专有网络中使用阿里云资源,如云服务器、云数据库RDS和负载均衡等。每个专有网络都由、。示例:,,10.0.0.0/8及自定义地址段是专有网络的枢纽。作为专有网络中重要的功能组件,它可以连接专有网络内的各个交换机,同时也是连接专有网络和其他网络的网关设备。每个专有网络创建成功后,系统会自动创建一个路由器。

2022-11-20 17:22:14 3070

原创 Elasticsearch系列教程之spring boot集成ES

Elasticsearch系列教程之springboot集成ES。

2022-07-31 16:21:24 548

原创 Elasticsearch系列教程之核心概念及用法

es核心概念及使用教程

2022-07-31 16:15:32 487

原创 Elasticsearch系列教程之Elasticsearch Kibana Head等工具安装

本文介绍了Elasticsearch、Kibana、Elasticsearch-Head等工具安装

2022-07-31 15:39:57 514

原创 Elasticsearch系列教程之ES介绍及与Solr对比

ElasticSearch是一个开源的高拓展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用java开发并使用Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好、功能最全的搜索引

2022-07-31 15:29:13 699

转载 图解G1GC原理

本文介绍了G1垃圾回收器的工作原理

2022-07-12 17:53:01 709

原创 SQL注入攻击原理与防御措施

原理:所谓SQL注入,就是通过把SQL命令伪装成正常的HTTP请求参数传递到服务端,款骗服务器最终执行恶意的SQL命令,达到入侵目的。攻击者可以利用SQL注入漏洞,查询非授权信息,修改数据库服务器的数据,改变表结构,甚至是获取服务器root权限。总而言之,SQL注入漏洞的危害极大,攻击者采用的SQL指令决定了攻击的威力。目前涉及的大批量数据泄露的攻击事件,大部分都是通过SQL注入来实施的。示例:假设某个存在漏洞的网站登录页需要输入用户名和密码,后台接收到参数后是直接拼接SQL查数据库,如:

2022-04-30 23:46:15 3769

原创 CSRF攻击原理与防御措施

CSRF(Cross-Site Request Forgery),中文名称:跨站请求伪造,缩写为:CSRF或XSRF,它是一种对网站的恶意利用,和XSS不同的是,XSS是利用站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。可以这么理解:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。CSRF能做的事情包括利用你的身份发短信、邮件,进行转账交易,甚至盗取你的账号等。图片来源于网络:XSS攻击原理/过程:假设某银行网站A以GET请求来发起转.

2022-04-30 23:40:17 664

原创 XSS攻击原理

XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为不跟层叠样式表CSS(Cascading Style Sheets)的缩写混淆,故将跨站脚本攻击缩写为XSS,它是Web应用程序中最常见到的攻击手段之一。跨站脚本攻击指的是攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、用户名密码,下载执行病毒木马程序,甚至是获取客户端admin权限等。示例:假设页面上有个表单元素,名称为username,用于展示和修

2022-04-30 23:31:18 229

原创 多线程环境中lock.trylock方法争抢锁

在多线程或分布式环境中,经常需要用到锁,trylock有两种用法,一种是不带参数:不设置等待时间,获取失败立即返回false。另一种是带等待时间的,线程会先挂起等待设置的时间结束如果还未获取到锁则返回false。下面来看一个多线程争抢锁的实例:public void execWithLock(Lock lock, Supplier<Boolean> supplier) { //Lock lock = new ReentrantLock(); //obtainLock(l

2022-01-10 21:07:21 2475

原创 JDK8 List中实用方法

List<String> list = Lists.newArrayList();list.add("2");list.add("1");list.add("3");System.out.println("forEach demo:");list.stream().forEach(str -> System.out.println(str));System.out.println("filter demo:");list.stream().filter(str ->.

2021-04-22 22:36:46 158

转载 白话数据中台

<div id="articlecontent" class="article_container" onmousedown="newhighlight = true;" onmouseup="NewHighlight(event);"><div class="article_showall"><div><a href="javascript:void(0);" onclick="$('body').removeClass('articleMaxH')" da

2021-02-24 18:57:24 221

原创 python自动化操作浏览器

python的语法精炼简洁,并且很方便集成自动化工具selenium,因此特别适合各个行业的工作人员学习和编写简单程序来实现“机器人助理”帮我们处理频繁重复的网站操作。废话不多说,直接上代码,下面为了帮助非IT从业者更方便的了解python语法规则,使用一个demo程序来进行一个简单的自动化入门。环境要求:安装python3.7或更高版本的SDK,至于代码编辑器可以自行网上搜索,我使用的是Intellij IDEA,这个是付费的,当然网上也有破解方式。实现功能:访问证监会网站,自动输入公司名称,

2021-02-01 12:50:11 2700 2

原创 PCF应用挂载文件服务器

PCF上要创建文件服务器的话需要创建一个smb类型的Service。现在我们假设我们创建的smb服务名为:TestSmb文件服务器HostName:test12345.prod.001.test.com文件服务器上存储应用文件的目录为:/001/TEST文件服务器登录名/密码为:tempuser/123456在应用中绑定文件服务器的目录为:/proj/files (该目录下所有文件的存、取都对应文件服务器上/001/TEST目录)需要挂载文件服务器的应用名为:TestApp.

2021-01-13 20:25:50 231

原创 PCF应用管理平台介绍(PCF Apps Manager)

节点(node)一个节点会对应一台server, 不同节点登入管理平台的域名不一样。组织(org)节点下的Root directory登陆之后可以看到自己有权限的org, 没有的话需要先申请权限一个org对应一个独立的Project,里面可能只有一个应用(application),也可能由多个微服务应用组成,如何确定一个Project?以顶层LB域名为准org的总内存由该org下面的所有space共享,比如:org总共有10G内存,该org下的space1使用了7G,那么spa.

2021-01-13 14:16:59 1211

原创 Jenkins系列教程之 - Jenkins所有job构建风格介绍

Jenkins job所有风格:Freestyle project(自由风格的软件项目):自由风格的软件项目,在这种Job里面可以结合任何SCM和任何构建系统来构建项目,甚至可以构建软件以外的系统。这种类型的Job有“常规配置”,“源码管理”,“构建触发器”,“构建环境”,“构建”,“构建后操作”等配置项,可以根据多种脚本语言构建,如:Ant, Gradle, Windows batch, shell等。这种类型的好处是可以自由设计构建方式,比较方便扩展。缺点是如果你只需要一个大众化/典

2020-07-22 20:59:01 886 1

原创 Jenkins系列教程之 - Jenkins特性

Jenkins的特性Jenkins是一个独立的开源自动化服务器,可用于自动化各种任务,如构建,测试和部署软件项目。持续集成和持续交付 作为一个可扩展的自动化服务器,Jenkins 可以用作简单的 CI 服务器,或者变成任何项目的持续交付中心。注:持续集成包含了构建与自动化测试的阶段,而持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的“类生产环境”之中。简易安装 Jenkins 是一个基于 Java 的独立程序,可以立即运行,包含 Windows、Mac OS X

2020-07-22 20:57:38 292

原创 Jenkins系列教程之 - Linux Windows安装搭建Jenkins服务

系统要求:最低:内存256MB, 磁盘1G小团队推荐:内存1G, 磁盘50G软件配置:Java 8 – JRE/JDK都可Linux环境安装与配置:CentOS 7示例:sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keysudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.keysudo yum upgrade..

2020-07-17 18:51:36 227

原创 使用HTTP GET POST方式实现GraphQL查询

除了使用GraphiQL客户端工具以及PostMan外,也可以使用HTTP GET和POST来发送REST请求获取数据,请求格式如下:示例1GET:http://localhost:8089/graphql?query={getTypeList{status statusDesc data{name}}}这个等同于在工具里面输入:{ getTypeList { status...

2019-08-12 14:47:20 4604

原创 GraphQL创建自定义标量ScalarType (基于Spring Boot)

目前GraphQL还没有大规模在国内应用,所以文档较少,为方便大家解决问题,故整理了下在Spring Boot项目中创建GraphQL标量的步骤:(现假设你已经有一个spring boot + graphql环境,并且可以正常跑起来了,如果没有,请看本人之前的关于graphql搭建的博客)1. 比如你要新建一个DateTime的标量,新建一个DateTimeScalarType类,它需要继...

2019-08-05 20:09:52 3291 2

原创 GraphQL介绍以及在Spring Boot/Cloud项目中搭建GraphQL并测试

GraphQL what & whyGraphQL是一种API查询语言,它是一种动态的API查询方式,同一个API可以返回不同的结果。普通的REST请求是预先定义好的,前端需要什么数据会和后端讲,然后后端开始商量好返回数据格式,然后进行开发。而GraphQL是REST的升级版,定义好某个API之后,可以用GraphQL做多种操作,比如说只需要id那么可以在调用的时候指明只返回id,...

2019-07-31 15:39:31 4431 1

原创 Windows查看端口号被哪个进程占用并杀死进程

在启动项目准备调试或测试的时候,时不时会碰到端口号被占用导致启动失败,这个问题总让人有种想砍人的冲动,于是整理了这两个比较常用的命令,方便快速找到占用的那个进程,并砍死它。命令1:找到端口被哪个进程占用:netstat -ano|findstr 8088(请将8088替换成你自己出冲突的端口)命令2:杀死那个进程:taskkill /f /t /im 17716...

2019-07-23 11:32:16 3227 1

原创 PCF创建Route并绑定到相应的应用程序的所有方式(命令行,管理后台,manifest.yml, cf push)

1. PCF命令行创建Route并绑定到相应的应用上:使用cf create-route命令创建路由,格式为:cf create-route 空间名 域名 –hostname 应用名$ cf create-route my-space shared-domain.example.com --hostname myapp为啥要加hostname呢,就是表示域名将以myapp.shared...

2019-07-12 15:18:37 3459

原创 用PCF命令行(CLI)配置服务RabbitMQ, Redis, Service Registry, Config Server 并在项目中使用

1. 用命令行配置RabbitMQ和Redis,并在项目中使用:先查看当前可选的服务列表:cf marketplace然后选择需要安装的服务,命令为:cf create-service 产品名称 产品计划 自己定的名称说明:产品名称一定要和上面列表里面显示的保持一致,产品计划也要喝列表里面plans那一列的名称保持一致,不然会报错说找不到的。命令示例: cf crea...

2019-07-11 19:48:52 3206

空空如也

空空如也

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

TA关注的人

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