<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>Yuandupier</title><link>https://yuanzhihao.life</link><atom:link href="https://yuanzhihao.life/rss.xml" rel="self" type="application/rss+xml"/><description>Cheer Up,  Bro </description><generator>Halo v2.22.14</generator><language>zh-cn</language><image><url>https://yuanzhihao.life/upload/851710231657_.pic.jpg</url><title>Yuandupier</title><link>https://yuanzhihao.life</link></image><lastBuildDate>Mon, 9 Mar 2026 08:09:50 GMT</lastBuildDate><item><title><![CDATA[基于Spring AI构建MCP服务]]></title><link>https://yuanzhihao.life/archives/wei-ming-ming-wen-zhang</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E5%9F%BA%E4%BA%8ESpring%20AI%E6%9E%84%E5%BB%BAMCP%E6%9C%8D%E5%8A%A1&amp;url=/archives/wei-ming-ming-wen-zhang" width="1" height="1" alt="" style="opacity:0;">前言 最近在预研MCP的使用，计划与我们的业务功能进行整合。本篇简单梳理下基于Spring AI框架下如何构建MCP服务。 使用到的组件以及版本]]></description><guid isPermaLink="false">/archives/wei-ming-ming-wen-zhang</guid><dc:creator>袁志豪</dc:creator><enclosure url="https://yuanzhihao.life/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fimage-20250427101644597.png&amp;size=m" type="image/jpeg" length="64989"/><category>技术</category><pubDate>Sun, 27 Apr 2025 02:56:20 GMT</pubDate></item><item><title><![CDATA[在Jenkins Pipeline中获取自上次成功构建后的文件变更]]></title><link>https://yuanzhihao.life/archives/jenkins-pipelinezhong-huo-qu-zi-shang-ci-cheng-gong-gou-jian-de-wen-jian-geng-gai</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E5%9C%A8Jenkins%20Pipeline%E4%B8%AD%E8%8E%B7%E5%8F%96%E8%87%AA%E4%B8%8A%E6%AC%A1%E6%88%90%E5%8A%9F%E6%9E%84%E5%BB%BA%E5%90%8E%E7%9A%84%E6%96%87%E4%BB%B6%E5%8F%98%E6%9B%B4&amp;url=/archives/jenkins-pipelinezhong-huo-qu-zi-shang-ci-cheng-gong-gou-jian-de-wen-jian-geng-gai" width="1" height="1" alt="" style="opacity:0;">背景 最近调整了一下项目的流水线，希望可以根据代码文件的变更自动识别修改的模块，从而进行相应服务的构建打包部署，简单记录一下。 具体实现 我们的项目是基于Maven多模块的，随着业务的发展，微服务模块的数量也从几个扩展到了十几个，以前无脑构建所有服务的情况可能效率就会非常低了，所以需要获取文件变更动]]></description><guid isPermaLink="false">/archives/jenkins-pipelinezhong-huo-qu-zi-shang-ci-cheng-gong-gou-jian-de-wen-jian-geng-gai</guid><dc:creator>袁志豪</dc:creator><enclosure url="https://yuanzhihao.life/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2Fa1488bc244264457b6b29bdf68d2c034.png&amp;size=m" type="image/jpeg" length="23639"/><category>Jenkins</category><pubDate>Sat, 11 May 2024 02:33:00 GMT</pubDate></item><item><title><![CDATA[远程调试Docker容器内的Java进程]]></title><link>https://yuanzhihao.life/archives/1712909559773</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95Docker%E5%AE%B9%E5%99%A8%E5%86%85%E7%9A%84Java%E8%BF%9B%E7%A8%8B&amp;url=/archives/1712909559773" width="1" height="1" alt="" style="opacity:0;">远程调试Docker容器内的Java进程 背景 开发环境无法复现测试的问题，尝试去远程调试测试环境docker容器内的java进程。 具体实现]]></description><guid isPermaLink="false">/archives/1712909559773</guid><dc:creator>袁志豪</dc:creator><category>技术</category><pubDate>Fri, 12 Apr 2024 08:15:00 GMT</pubDate></item><item><title><![CDATA[Jenkins Pipeline实现Golang项目的CI/CD]]></title><link>https://yuanzhihao.life/archives/jenkins-pipelineshi-xian-golangxiang-mu-de-ci-cd</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Jenkins%20Pipeline%E5%AE%9E%E7%8E%B0Golang%E9%A1%B9%E7%9B%AE%E7%9A%84CI%2FCD&amp;url=/archives/jenkins-pipelineshi-xian-golangxiang-mu-de-ci-cd" width="1" height="1" alt="" style="opacity:0;">Jenkins Pipeline实现Golang项目的CI/CD 背景 最近新增了一个Golang实现的项目，需要接入到现有的流水线架构中。 流程图 这边流程和之前我写过的一篇《基于Jenkins实现的CI/CD方案》差不多，不一样的是构建现在是手动触发的，没有配置webhook。因为不是业务主干代]]></description><guid isPermaLink="false">/archives/jenkins-pipelineshi-xian-golangxiang-mu-de-ci-cd</guid><dc:creator>袁志豪</dc:creator><category>Jenkins</category><pubDate>Mon, 11 Mar 2024 07:43:00 GMT</pubDate></item><item><title><![CDATA[使用Golang客户端实现Nacos服务注册发现和配置管理]]></title><link>https://yuanzhihao.life/archives/1709541840473</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8Golang%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%AE%9E%E7%8E%B0Nacos%E6%9C%8D%E5%8A%A1%E6%B3%A8%E5%86%8C%E5%8F%91%E7%8E%B0%E5%92%8C%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86&amp;url=/archives/1709541840473" width="1" height="1" alt="" style="opacity:0;">使用Golang客户端实现Nacos服务注册发现和配置管理 背景 最近需要把Golang实现的一个web项目集成到基于Spring Cloud Alibaba的微服务体系中，走Spring Cloud Gateway网关路由实现统一的鉴权入口。 软件版本 组件名称 组件版本 Nacos 2.2.0]]></description><guid isPermaLink="false">/archives/1709541840473</guid><dc:creator>袁志豪</dc:creator><category>Spring Cloud</category><pubDate>Mon, 4 Mar 2024 08:44:00 GMT</pubDate></item><item><title><![CDATA[基于Jenkins实现的CI/CD方案]]></title><link>https://yuanzhihao.life/archives/ji-yu-jenkinsshi-xian-de-ci-cdfang-an</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E5%9F%BA%E4%BA%8EJenkins%E5%AE%9E%E7%8E%B0%E7%9A%84CI%2FCD%E6%96%B9%E6%A1%88&amp;url=/archives/ji-yu-jenkinsshi-xian-de-ci-cdfang-an" width="1" height="1" alt="" style="opacity:0;">基于Jenkins实现的CI/CD方案 前言 最近基于Jenkins的基座，搭建了一套适用于我们项目小组的持续集成环境。现在把流程整理分享出来，希望可以给大家提供一些帮助和思路。 使用到的组件和版本 组件名称 组件版本 作用 Harbor 2.7.3 镜像仓库 Jenkins 2.319.2 持续集]]></description><guid isPermaLink="false">/archives/ji-yu-jenkinsshi-xian-de-ci-cdfang-an</guid><dc:creator>袁志豪</dc:creator><category>Jenkins</category><pubDate>Wed, 21 Feb 2024 08:31:00 GMT</pubDate></item><item><title><![CDATA[s3fs安装使用]]></title><link>https://yuanzhihao.life/archives/1689902255071</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=s3fs%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8&amp;url=/archives/1689902255071" width="1" height="1" alt="" style="opacity:0;">前言 最近在预研将对象存储桶挂载到本地文件系统的需求，查阅了一些相关的资料，找到s3fs-fuse开源组件，可以满足需求，本文主要记录一下s3fs的部署以及使用。 s3fs简介 s3fs 是一个 C++ 开发的开源工具，可以将 S3 对象存储通过 FUSE 挂载到本地，像本地磁盘一样进行读写访问。]]></description><guid isPermaLink="false">/archives/1689902255071</guid><dc:creator>袁志豪</dc:creator><category>技术</category><pubDate>Fri, 21 Jul 2023 01:18:00 GMT</pubDate></item><item><title><![CDATA[Spring Cloud Gateway路由到Amazon S3签名失败处理]]></title><link>https://yuanzhihao.life/archives/1689902185649</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Spring%20Cloud%20Gateway%E8%B7%AF%E7%94%B1%E5%88%B0Amazon%20S3%E7%AD%BE%E5%90%8D%E5%A4%B1%E8%B4%A5%E5%A4%84%E7%90%86&amp;url=/archives/1689902185649" width="1" height="1" alt="" style="opacity:0;">背景 最近在预研统一存储网关，想到就是使用Spring Cloud Gateway作为网关的入口，再反向代理到S3对象存储服务器。 软件版本 网关：Spring Cloud Gateway 3.1.2 s3对象存储：minio aws java sdk：1.12.429 问题现象 Spring Cl]]></description><guid isPermaLink="false">/archives/1689902185649</guid><dc:creator>袁志豪</dc:creator><category>Spring Cloud</category><pubDate>Fri, 21 Jul 2023 01:17:00 GMT</pubDate></item><item><title><![CDATA[基于RabbitMQ实现RPC]]></title><link>https://yuanzhihao.life/archives/1689853543247</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E5%9F%BA%E4%BA%8ERabbitMQ%E5%AE%9E%E7%8E%B0RPC&amp;url=/archives/1689853543247" width="1" height="1" alt="" style="opacity:0;">前言 这边参考了RabbitMQ的官网，想整理一篇关于RabbitMQ实现RPC调用的博客，打算把两种实现RPC调用的都整理一下，一个是使用官方提供的一个Java client，还有一个是Spring AMQP的整合使用。 代码路径：https://github.com/yzh19961031/bl]]></description><guid isPermaLink="false">/archives/1689853543247</guid><dc:creator>袁志豪</dc:creator><category>技术</category><pubDate>Thu, 20 Jul 2023 11:46:00 GMT</pubDate></item><item><title><![CDATA[Spring Boot中上传文件不写临时文件]]></title><link>https://yuanzhihao.life/archives/1689902140694</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Spring%20Boot%E4%B8%AD%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E4%B8%8D%E5%86%99%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6&amp;url=/archives/1689902140694" width="1" height="1" alt="" style="opacity:0;">前言 在SpringBoot文件上传中，用MultipartFile类型接收文件时，SpringBoot会生成一份临时文件，文件格式为upload_*.tmp，如果业务场景有大量小文件需要上传的话，可以将文件直接丢到内存里面，从而减少磁盘I/O操作，提高上传文件的性能。 具体实现 带着问题去baid]]></description><guid isPermaLink="false">/archives/1689902140694</guid><dc:creator>袁志豪</dc:creator><category>Spring Boot</category><pubDate>Fri, 26 May 2023 13:20:00 GMT</pubDate></item><item><title><![CDATA[Spring Boot中大文件分片上传—支持本地文件和Amazon S3]]></title><link>https://yuanzhihao.life/archives/1689902067126</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Spring%20Boot%E4%B8%AD%E5%A4%A7%E6%96%87%E4%BB%B6%E5%88%86%E7%89%87%E4%B8%8A%E4%BC%A0%E2%80%94%E6%94%AF%E6%8C%81%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%92%8CAmazon%20S3&amp;url=/archives/1689902067126" width="1" height="1" alt="" style="opacity:0;">前言 本篇主要整理了大文件分片上传客户端和服务端的实现，其中客户端是通过Java代码来模拟的文件分片上传的逻辑（我不太会写前端，核心逻辑都是一样的，这边前端可以参考开源组件：vue-uploader），服务端实现包含本地文件系统和Amazon S3对象存储两种文件存储类型。 分片上传实现原理 实现原]]></description><guid isPermaLink="false">/archives/1689902067126</guid><dc:creator>袁志豪</dc:creator><category>Spring Boot</category><pubDate>Wed, 19 Apr 2023 10:20:00 GMT</pubDate></item><item><title><![CDATA[Spring Boot中文件上传]]></title><link>https://yuanzhihao.life/archives/1689901986363</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Spring%20Boot%E4%B8%AD%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0&amp;url=/archives/1689901986363" width="1" height="1" alt="" style="opacity:0;">前言 本篇主要参考Spring官方文档，整理了Spring Boot中文件上传如何实现，以及在代码中使用RestTemplate和HttpClient两种方式实现文件上传。 创建Spring Boot项目 首先创建一个Spring Boot Web项目，使用的Spring Boot版本为2.6.14]]></description><guid isPermaLink="false">/archives/1689901986363</guid><dc:creator>袁志豪</dc:creator><category>Spring Boot</category><pubDate>Tue, 21 Mar 2023 03:18:00 GMT</pubDate></item><item><title><![CDATA[Amazon S3获取指定桶中所有对象列表]]></title><link>https://yuanzhihao.life/archives/1689901913456</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Amazon%20S3%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E6%A1%B6%E4%B8%AD%E6%89%80%E6%9C%89%E5%AF%B9%E8%B1%A1%E5%88%97%E8%A1%A8&amp;url=/archives/1689901913456" width="1" height="1" alt="" style="opacity:0;">背景 项目中使用Amazon S3对象存储的时候遇到一个问题，需要列出指定桶中的所有对象列表，但是参考官方文档，使用listObjects方法一次最多只能输出1000个对象。 解决方法 Google了一下，找到了下面的解决方案，亲测可以使用。 项目使用的是Java的SDK，maven坐标如下： &lt;d]]></description><guid isPermaLink="false">/archives/1689901913456</guid><dc:creator>袁志豪</dc:creator><category>技术</category><pubDate>Fri, 30 Dec 2022 11:15:00 GMT</pubDate></item><item><title><![CDATA[Jenkins插件开发——支持参数化]]></title><link>https://yuanzhihao.life/archives/1689901868049</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Jenkins%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E2%80%94%E2%80%94%E6%94%AF%E6%8C%81%E5%8F%82%E6%95%B0%E5%8C%96&amp;url=/archives/1689901868049" width="1" height="1" alt="" style="opacity:0;">前言 在jenkins构建的时候，我们可以将一些经常会变化的参数值提取出来，使用参数化的方式，在每次构建的时候赋值。jenkins本身是支持这种能力的，本篇文章主要整理下对于自己开发的jenkins插件如何支持参数化。 具体实现 具体实现很简单，在jenkins的api中，提供如下几个方法，首先第一]]></description><guid isPermaLink="false">/archives/1689901868049</guid><dc:creator>袁志豪</dc:creator><category>Jenkins</category><pubDate>Thu, 22 Sep 2022 14:15:00 GMT</pubDate></item><item><title><![CDATA[Nacos支持https]]></title><link>https://yuanzhihao.life/archives/1689901805912</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Nacos%E6%94%AF%E6%8C%81https&amp;url=/archives/1689901805912" width="1" height="1" alt="" style="opacity:0;">前言 本文主要整理了Nacos Server如何开启https，以及对于注册发现和客户端负载均衡需要如何适配修改。 软件版本 Spring Boot 2.6.7 Spring Cloud 2021.0.2 Spring Cloud Alibaba 2021.0.1.0 Nacos 2.1.0 测试项]]></description><guid isPermaLink="false">/archives/1689901805912</guid><dc:creator>袁志豪</dc:creator><category>Spring Cloud</category><pubDate>Fri, 16 Sep 2022 11:12:00 GMT</pubDate></item><item><title><![CDATA[Nacos使用实践]]></title><link>https://yuanzhihao.life/archives/1689901718858</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Nacos%E4%BD%BF%E7%94%A8%E5%AE%9E%E8%B7%B5&amp;url=/archives/1689901718858" width="1" height="1" alt="" style="opacity:0;">背景 本文主要整理了如何使用nacos作为微服务的注册中心、配置中心以及开启鉴权。 软件版本 Spring Boot 2.6.7 Spring Cloud 2021.0.2 Spring Cloud Alibaba 2021.0.1.0 Nacos 2.1.0 Nacos Server部署 本次部署]]></description><guid isPermaLink="false">/archives/1689901718858</guid><dc:creator>袁志豪</dc:creator><category>Spring Cloud</category><pubDate>Tue, 2 Aug 2022 14:21:00 GMT</pubDate></item><item><title><![CDATA[Jenkins插件开发——提供对外访问接口]]></title><link>https://yuanzhihao.life/archives/1689901652544</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Jenkins%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E2%80%94%E2%80%94%E6%8F%90%E4%BE%9B%E5%AF%B9%E5%A4%96%E8%AE%BF%E9%97%AE%E6%8E%A5%E5%8F%A3&amp;url=/archives/1689901652544" width="1" height="1" alt="" style="opacity:0;">前言 上一篇文章中整理了插件构建时如何在侧面板添加标签来实现插件的拓展，除了添加侧面板标签以外，Jenkins插件还支持通过暴露接口的方式来实现对插件的拓展。这种方式更加适合做基于jenkins的拓展开发。 实现效果 插件构建结束之后，可以通过URL http://localhost:8080/je]]></description><guid isPermaLink="false">/archives/1689901652544</guid><dc:creator>袁志豪</dc:creator><category>Jenkins</category><pubDate>Wed, 20 Jul 2022 14:09:00 GMT</pubDate></item><item><title><![CDATA[Jenkins插件开发——插件的拓展]]></title><link>https://yuanzhihao.life/archives/1689901532317</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Jenkins%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E2%80%94%E2%80%94%E6%8F%92%E4%BB%B6%E7%9A%84%E6%8B%93%E5%B1%95&amp;url=/archives/1689901532317" width="1" height="1" alt="" style="opacity:0;">前言 对于每一次的构建，我们可能希望Jenkins有除了控制台日志以外的其他地方承载构建的结果，这个时候可以对插件进行拓展，本文就用一个简单的样例演示如何拓展自己开发的Jenkins插件。 创建HelloWorldAction 本次是基于之前博客中整理的插件工程进行的开发，项目具体的代码目录如下：]]></description><guid isPermaLink="false">/archives/1689901532317</guid><dc:creator>袁志豪</dc:creator><category>Jenkins</category><pubDate>Tue, 19 Jul 2022 07:33:00 GMT</pubDate></item><item><title><![CDATA[Mockito中模拟静态方法]]></title><link>https://yuanzhihao.life/archives/1689901497624</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=Mockito%E4%B8%AD%E6%A8%A1%E6%8B%9F%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95&amp;url=/archives/1689901497624" width="1" height="1" alt="" style="opacity:0;">背景 在项目实际开发中，编写单元测试用例时，需要对静态方法进行模拟，本次文章就简单整理下如何使用Mockito来模拟静态方法。 添加依赖 &lt;dependency&gt; &lt;groupId&gt;org.mockito&lt;/groupId&gt; &lt;artifactId&gt;mockito-inline&lt;/artif]]></description><guid isPermaLink="false">/archives/1689901497624</guid><dc:creator>袁志豪</dc:creator><category>技术</category><pubDate>Fri, 15 Jul 2022 08:08:00 GMT</pubDate></item><item><title><![CDATA[使用zookeeper代替eureka]]></title><link>https://yuanzhihao.life/archives/1689900773044</link><description><![CDATA[<img src="https://yuanzhihao.life/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8zookeeper%E4%BB%A3%E6%9B%BFeureka&amp;url=/archives/1689900773044" width="1" height="1" alt="" style="opacity:0;">背景 项目目前使用的eureka版本是1.10.17，该版本是目前最新的版本，这个版本是2021年9月份发布的，到现在也已经快一年没有更新过了。而且eureka2.x版本也停止了开发，所以需要寻找eureka的替换组件。本文就简单梳理下在Spring Cloud中使用zookeeper来替代eure]]></description><guid isPermaLink="false">/archives/1689900773044</guid><dc:creator>袁志豪</dc:creator><category>Spring Cloud</category><pubDate>Wed, 13 Jul 2022 12:56:00 GMT</pubDate></item></channel></rss>