自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在Jenkins Pipeline中获取自上次成功构建后的文件变更

一开始,我使用的是Git命令,获取上次成功构建的GIT_COMMIT,然后进行比较获取对应的文件变更,但是这种情况对于Merge Request的场景好像不适用,因为原分支多次push之后再MR,Git命令也就只能获取最后的一次提交,之前的变更就捞不到,所以结果不是很准确。我这边也贴一下具体的Pipeline脚本。我们的项目是基于Maven多模块的,随着业务的发展,微服务模块的数量也从几个扩展到了十几个,以前无脑构建所有服务的情况可能效率就会非常低了,所以需要获取文件变更动态构建修改的微服务模块。

2024-05-11 10:30:15 705 1

原创 远程调试Docker容器内的Java进程

开发环境无法复现测试的问题,尝试去远程调试测试环境docker容器内的java进程。我这边简单搭建了一个Spring Boot项目和本地构建了一个Docker环境作为验证。只提供了一个HTTP接口首先需要在Java进程启动的时候,添加如下启动参数参数的具体含义构建镜像的Dockerfile文件参考如下在IDEA中配置Docker环境,配置参考如下,这边需要把服务的端口和Debug的端口都开出来之后启动容器,访问localhost:8080/hello/{{name}}正常在idea新增一个Re

2024-04-12 16:21:13 677

原创 Jenkins Pipeline实现Golang项目的CI/CD

最近新增了一个Golang实现的项目,需要接入到现有的流水线架构中。这边流程和之前我写过的一篇《基于Jenkins实现的CI/CD方案》差不多,不一样的是构建现在是手动触发的,没有配置webhook。因为不是业务主干代码,部署的频率比较低。Dockerfile文件Jenkinsfile文件有一个需要注意的地方,Source Package 源码编译阶段,除了指定构建的容器以外,我还挂载了一个go-cache的volume,这边是为了缓存go的依赖。这边是为了提高构建的速度,或者也可以解决构建机器连接

2024-03-11 15:40:51 1005 1

原创 使用Golang客户端实现Nacos服务注册发现和配置管理

最近需要把Golang实现的一个web项目集成到基于Spring Cloud Alibaba的微服务体系中,走Spring Cloud Gateway网关路由实现统一的鉴权入口。项目图示Golang客户端的注册发现使用的Nacos官方仓库里面的一个实现:https://github.com/nacos-group/nacos-sdk-go,我这边的实现大多数也是参考的官方提供的样例。首先,初始化clientConfig和serverConfig的配置创建服务发现客户端服务注册启动服务,验证ok作为

2024-03-04 16:30:55 2612

原创 RabbitMQ学习整理————基于RabbitMQ实现RPC

这边参考了RabbitMQ的官网,想整理一篇关于RabbitMQ实现RPC调用的博客,打算把两种实现RPC调用的都整理一下,一个是使用官方提供的一个Java client,还有一个是Spring AMQP的整合使用。RPC是远程过程调用(Remote Procedure Call)的缩写形式,简单说就是一个节点去请求另一个节点上面的服务并获得响应结果。

2024-02-23 16:53:56 2548 5

原创 基于Jenkins实现的CI/CD方案

最近基于Jenkins的基座,搭建了一套适用于我们项目小组的持续集成环境。现在把流程整理分享出来,希望可以给大家提供一些帮助和思路。我这边是基于Jenkins的Pipeline+Docker的方式进行的任务编排,Jenkins是找的一个别人做好的,内置了绝大多数插件的容器版本,链接地址:https://hub.docker.com/r/h1kkan/jenkins-docker。这个做好的镜像里面没有SSH Pipeline Steps这个插件,需要自己额外下载一下,这边需要注意一下插件和Jenkins的对

2024-02-21 16:07:35 1366

原创 s3fs安装使用

s3fs是一个 C++ 开发的开源工具,可以将 S3 对象存储通过 FUSE 挂载到本地,像本地磁盘一样进行读写访问。基于s3fs我们可以完成很多功能,比如说可以更方便的操作桶内的文件,还有简单的实现对象跨池和桶的迁移等等。

2023-07-13 15:06:26 1179

原创 Spring Cloud Gateway路由到Amazon S3签名失败处理

最近在预研统一存储网关,想到就是使用Spring Cloud Gateway作为网关的入口,再反向代理到S3对象存储服务器。

2023-05-15 19:36:02 1120 1

原创 Spring Boot中上传文件不写临时文件

遇到一些问题建议可以问问ChatGPT,感觉有时候比google好用。

2023-04-23 11:48:55 1532 1

原创 Spring Boot中大文件分片上传—支持本地文件和Amazon S3

本篇主要整理了大文件分片上传客户端和服务端的实现,其中客户端是通过Java代码来模拟的文件分片上传的逻辑(我不太会写前端,核心逻辑都是一样的,这边前端可以参考开源组件:vue-uploader),服务端实现包含本地文件系统和AWS S3对象存储两种文件存储类型。实现原理其实很简单,网上也有很多资料,核心就是客户端把大文件按照一定规则进行拆分,比如20MB为一个小块,分解成一个一个的文件块,然后把这些文件块单独上传到服务端,等到所有的文件块都上传完毕之后,客户端再通知服务端进行文件合并的操作,合并完成之后整个

2023-04-11 11:38:20 3355

原创 Spring Boot中文件上传

本篇主要参考Spring官方文档,整理了Spring Boot中文件上传如何实现,以及在代码中使用RestTemplate和HttpClient两种方式实现文件上传。首先创建一个Spring Boot Web项目,使用的Spring Boot版本为2.6.14,项目的pom文件如下:主要功能提供下面三个功能:这边直接贴一下代码:controllerservice上传文件限制可以在application.properties配置文件中限制上传单个文件的大小和所有文件的总大小,具体配置如下:测试验

2023-03-28 10:30:36 1774

原创 Amazon S3获取指定桶中所有对象列表

项目中使用AWS S3对象存储的时候遇到一个问题,需要列出指定桶中的所有对象列表,但是参考官方文档,使用listObjects方法一次最多只能输出1000个对象。

2022-12-30 10:51:20 1884

原创 Jenkins插件开发——支持参数化

在jenkins构建的时候,我们可以将一些经常会变化的参数值提取出来,使用参数化的方式,在每次构建的时候赋值。jenkins本身是支持这种能力的,本篇文章主要整理下对于自己开发的jenkins插件如何支持参数化。具体实现很简单,在jenkins的api中,提供如下几个方法,首先第一个是hudson.model.AbstractBuild#getEnvironment,该方法入参是hudson.model.TaskListener,返回类型是hudson.EnvVars,返回当前jenkins所有环境变量列表

2022-09-22 19:42:02 841

原创 Nacos支持https

本文主要整理了Nacos Server如何开启https,以及对于注册发现和客户端负载均衡需要如何适配修改。Spring Boot 2.6.7Spring Cloud 2021.0.2Spring Cloud Alibaba 2021.0.1.0Nacos 2.1.0Nacos官方文档中没有明确支持Nacos Server的https,目前参阅部分技术文档,都是通过nginx代理转发来实现的https。这种方式其实没有真正的让Nacos Server开启https,默认我们应该是通过 https:/

2022-09-16 12:27:22 5741 2

原创 Nacos使用实践

本文主要整理了如何使用nacos作为微服务的注册中心、配置中心以及开启鉴权。

2022-08-02 00:30:01 2824

原创 Jenkins插件开发——提供对外访问接口

上一篇文章中整理了插件构建时如何在侧面板添加标签来实现插件的拓展,除了添加侧面板标签以外,Jenkins插件还支持通过暴露接口的方式来实现对插件的拓展。这种方式更加适合做基于jenkins的拓展开发。...

2022-07-20 20:14:59 939

原创 Jenkins插件开发——插件的拓展

对于每一次的构建,我们可能希望Jenkins有除了控制台日志以外的其他地方承载构建的结果,这个时候可以对插件进行拓展,本文就用一个简单的样例演示如何拓展自己开发的Jenkins插件。

2022-07-19 23:50:25 1059

原创 Mockito中模拟静态方法

在项目实际开发中,编写单元测试用例时,需要对静态方法进行模拟,本次文章就简单整理下如何使用Mockito来模拟静态方法。

2022-07-15 23:39:13 6267

原创 使用zookeeper代替eureka

项目目前使用的eureka版本是1.10.17,该版本是目前最新的版本,这个版本是2021年9月份发布的,到现在也已经快一年没有更新过了。而且eureka2.x版本也停止了开发,所以需要寻找eureka的替换组件。本文就简单梳理下在Spring Cloud中使用zookeeper来替代eureka作为服务注册中心。...

2022-07-13 00:51:40 496

原创 Harbor中镜像清理

项目的每日构建中,由于微服务比较多,每天会产生比较多的镜像,导致Harbor服务器很快被占满。所以要定期去清理不需要的镜像来释放存储空间。使用的Harbor版本是2.5.0镜像清理可以手动在Harbor页面上操作。根据Harbor官方文档,当我们删除某个镜像时,存储空间不会被真正的释放,必须要手动去执行垃圾清理来释放不再被引用的blobs文件。首先在页面删除不需要的镜像信息。然后在系统管理->垃圾清理,选择立即清理垃圾,手动GC。在立即清理右边有一个模拟运行,运行这个会打印出符合删除条件的blobs,并且

2022-06-29 23:01:00 3980 1

原创 Spring Boot整合ELK实现日志采集与监控

在分布式项目中,可以采用ELK来作为日志的收集与分析系统,提供一个统一的入口来对日志进行收集,访问和管理。本文主要演示Spring Boot项目与ELK整合来实现日志的采集与监控。本次测试工程中,采用的架构如下图所示,微服务通过TCP协议将日志提供给Logstach,Logstach对日志数据进行采集和转换之后,将日志数据发送到Elasticsearch存储库,然后再通过Kibana对日志数据进行可视化的呈现。当然还有很多种不同的实现方案,比如可以通过Beats替代Logstash,或者可以与消息队列集

2022-06-20 23:42:04 2003

原创 Jenkins插件开发——新增全局参数配置

在jenkins插件开发的过程中,每一次build构建插件的时候,可能某些参数一直是固定的,对于这些固定的配置,可以通过jenkins插件中提供的全局参数功能来进行配置。本次就简单梳理下jenkins插件开发时如何进行全局参数的配置。jenkins提供了一个父pom文件,它帮我们集成了开发jenkins插件所有需要的组件,同时我们需要在properties中指定jenkins的版本以及java的版本,具体的pom文件如下:测试插件流程本次提供的demo案例中,可以通过全局配置的一个开关设置是否打印对应的

2022-06-16 00:53:13 1499 2

原创 Spring Security中自定义认证逻辑(防暴力破解)

项目开发时,需要对服务接口进行防暴力破解的防护,项目中使用的Spring Security没有对放暴力破解的支持,所以需要自己重写Spring Security中的认证逻辑来实现防暴力破解的能力。本次使用的软件版本如下:Spring Boot 2.6.7 (配套的Spring Security版本是5.6.3)下面是具体的实现案例,先简单梳理下实现方案。基于servlet的应用和基于webflux的应用实现有点不太一样,这边都整理一下,不过差别也不大。新增Spring Security配置类,继承WebSe

2022-06-11 20:22:28 1744

原创 Spring Boot升级后单元测试不生效

升级了Spring Boot到2.6.7版本之后,DT流水线没有跑过,查看CI日志应该是没有识别到单元测试用例,所有的单元测试都没有执行。本地执行mvn package命令的时候也没有跑单元测试。升级之前,项目使用的JUnit版本是4.13.2,spring-boot-starter-test的版本是2.3.12.RELEASE。是基于JUnit4的单元测试。Google一下,参考了部分文档,发现应该是升级了Spring Boot之后,在Spring Boot 2.4版本开始,junit-vintage-e

2022-06-08 20:33:52 1998 1

原创 Spring Boot、Spring Cloud升级踩坑汇总

最近在进行Spring Boot、Spring Cloud的升级,是跨大版本升级,遇到了一些适配的问题,本文主要整理了升级中遇到的问题以及自己的解决思路,希望能够帮助到大家。升级版本如下:Spring Boot 2.3.12.REALEASE -> 2.6.7Spring Cloud Hoxton.SR12 -> 2021.0.2根据我们产品使用的功能,大概有如下几个修改点。Spring Boot 2.6.X版本之后默认是不允许产生循环依赖,如果代码中存在循环依赖会直接启动失败。这边需要通过设置spri

2022-06-07 00:08:08 2223

原创 Spring Cloud Gateway添加熔断

Spring Cloud Gateway添加熔断前言本文主要介绍如何在Spring Cloud Gateway中添加熔断处理。使用的软件版本如下:Spring Boot 2.6.7Spring Cloud 2021.0.2添加依赖Spring Cloud提供了一个开箱即用的熔断实现Resilience4j,在后续高版本的Spring Cloud中,剔除了Spring Cloud Netflix中很多组件,Resilience4j就是用来替代Neflix Hystrix。本文中采用Resilie

2022-05-26 23:42:23 1796 1

原创 Spring Cloud Gateway中路由到https后端

Spring Cloud Gateway中路由到https后端背景在进行zuul切换到gateway时,由于我们的微服务都是https的,所以需要在网关进行路由时支持https的调用。实现方案参考部分官方文档和技术文章,大概罗列出三种可以实施的方案。方案一第一种方案,可以在网关进行路由时,进行如下配置信任所有的下游证书:spring: cloud: gateway: httpclient: ssl: useInsecureTrustM

2022-05-13 00:11:23 3077

原创 Spring Cloud Gateway中session共享

Spring Cloud Gateway中session共享背景在进行zuul切换到gateway时,需要重新实现session共享,本文主要分享一下自己实现的方案。zuul中的session共享在zuul中,是通过spring-session-data-redis这个组件,将session的信息存放到redis中实现的session共享。这次也简单说明下如何实现以及一些注意的点。首先在网关zuul以及所有的微服务中添加spring-session-data-redis依赖:<!-- se

2022-05-08 21:17:34 8023 19

原创 Spring Cloud Gateway实现限流

Spring Cloud Gateway实现限流背景zuul切换为spring cloud gateway时,需要重新实现限流逻辑。本文主要整理了spring cloud gateway中如何实现限流。zuul中的限流之前zuul的限流是通过guava提供的令牌桶算法实现的,通过一个全局的过滤器,对所有经过网关的请求,以IP地址作区分进行限流。引入guava依赖:<dependency> <groupId>com.google.guava</groupId&gt

2022-04-27 21:25:40 6267 2

原创 Harbor搭建和使用

Harbor搭建和使用背景项目组之前使用的镜像仓库机器被释放,所以需要搭建自己的镜像仓库。本文主要记录下如何搭建Harbor镜像仓库。环境准备本次用于搭建harbor镜像仓库的机器配置如下(这个是在我自己机器搭建的,客户端和服务器都是用的一台机器,开发环境使用的suse服务器)操作系统macOS Monterey内存16GB磁盘512GBCPU4机器需要安装docker以及docker-compose,我本地的版本如下,这边对应的版本要求可以自己参考Ha

2022-04-27 00:13:26 2315

原创 Spring Cloud Gateway自定义过滤器

Spring Cloud Gateway自定义过滤器背景最近项目需要切换网关,由zuul切换为spring cloud gateway,研究了部分spring cloud gateway能力,本文主要记录了spring cloud gateway如何自定义过滤器。创建Spring Cloud Gateway工程添加如下maven依赖引入Spring Cloud Gateway,这边我测试的工程使用的Spring Cloud以及Spring Boot版本分别为Hoxton.SR12和2.3.12.RE

2022-04-22 22:43:43 5118

原创 SpringBoot集成H2数据库

SpringBoot集成H2数据库背景H2数据库是一个Java编写的关系型数据库,它可以被嵌入到Java应用程序中使用,或者作为一个单独的数据库服务器运行。它支持内存模式,所以在单元测试的时候,使用H2数据库是一个很好的选择。本篇记录了SpringBoot整合H2数据库的简单使用。添加H2依赖添加如下maven坐标引入H2数据库:<dependency> <groupId>com.h2database</groupId> <artifactId>

2022-02-09 20:19:42 1577

原创 Spring Cloud OpenFeign简单使用以及开启https

Spring Cloud OpenFeign简单使用以及开启https前言之前的几篇博客中,微服务之间的调用是通过注入一个restTemplate对象,并且使用@LoadBalanced注解实现了负载均衡。其实Spring Cloud也提供了声明式的REST客户端:Feign,相对于直接注入restTemplate对象,Feign的使用更加简洁一些。本文主要记录了Spring Cloud OpenFeign如何开启https,对OpenFeign的基本使用也简单进行了整理。测试工程本次主要由三个工

2022-01-28 23:48:19 6634 5

原创 SpringBoot配置文件中密码属性加密

SpringBoot配置文件中密码属性加密本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,读取以及对于自定义的加密算法加密的参数如何保存和读取。背景为了安全的需要,一些重要的信息比如数据库密码不能明文保存在配置文件中,需要进行加密之后再保存。SpringBoot可以使用jasypt-spring-boot这个组件来为配置属性提供加密的支持。集成jasypt-spring-boot到项目中根据官方README文档,可以有三种方式集成jasypt-spring-boot到项目中。

2022-01-27 22:33:17 10850 1

原创 使用Mockito进行单元测试实践

使用Mockito进行单元测试实践Mockito简介以及工作流程Mockito是一个用于在软件测试中模拟对象的开源框架,使用Mockito很大程度简化了对具有外部依赖项的类的测试开发。mock的对象就是接口或者类的一个虚拟的实现,他允许自己定义方法的输出。通常是模拟比如和其他系统的交互信息然后再进行测试验证。mock的流程:mock出来测试类的依赖,自定义输出的结果执行测试类代码验证执行的结果是否和预期一致工程添加Mockito依赖项目使用的是maven构建,需要添加下面的依赖。我项

2022-01-27 00:41:47 3672

原创 Spring Cloud Config启用https

Spring Cloud Config启用https前言本篇主要整理spring cloud config如何开启https,以及微服务如何通过https去访问spring cloud config服务器上的配置文件。项目工程包含一个eurekaServer服务器,一个eurekaClient客户端,一个cloud config server配置中心。springcloudconfig配置中心开启https和之前整理的文章一样,配置中心其实就是一个spring boot的工程,只要添加ssl证

2021-11-28 15:25:37 1700

原创 Spring Cloud Config本地以及远端模式实践

Spring Cloud Config本地以及远端模式实践前言本篇主要整理了spring cloud config的使用,包含本地模式以及远端模式。项目工程包含一个eurekaServer注册中心,一个eurekaClient,一个Spring Cloud Config配置中心。Spring Cloud Config配置首先是pom文件,需要添加spring cloud config的依赖支持,同时也将spring cloud config作为eureka Client注册到eureka上面,

2021-11-26 23:58:31 958

原创 Eureka开启https实践

Eureka开启https实践前言本篇主要整理了eureka server如何开启https,以及eureka client之前如何通过https进行访问。测试工程本次主要涉及三个工程,一个是Eureka Server注册中心:eurekaServer,两个Eureka Client:client-1和server-1,并且由client-1去调用server-1提供的服务。Eureka Server 、Eureka Client证书生成首先需要生成每个服务对应访问的证书,采用本地证书生成的方

2021-11-26 20:49:15 3967 3

原创 JVM学习整理——本地方法栈详解

本地方法栈本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用非常相似,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。本地方法栈也是线程私有的。和虚拟机栈一样,本地方法栈也会在栈深度溢出或者拓展失败时分别跑出StackOverFlowError和OutOfMemoryError异常。本地方法是使用C语言实现的。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界,它和虚

2021-04-02 21:28:05 1343

原创 JVM学习整理——虚拟机栈详解

go

2021-04-01 23:47:09 405

空空如也

空空如也

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

TA关注的人

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