<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[String_001的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/String_001</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; String_001]]></copyright><item><title><![CDATA[常用工具方法集合]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/154991870</link><guid>https://blog.youkuaiyun.com/String_001/article/details/154991870</guid><author>String_001</author><pubDate>Tue, 18 Nov 2025 15:51:06 +0800</pubDate><description><![CDATA[自用小工具。]]></description><category></category></item><item><title><![CDATA[自定义注解实现数据转换（单条和批量），支持aop自动转换和手动转换]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/152923544</link><guid>https://blog.youkuaiyun.com/String_001/article/details/152923544</guid><author>String_001</author><pubDate>Fri, 10 Oct 2025 14:58:47 +0800</pubDate><description><![CDATA[*** 数据转换注解*//*** 转换类型*//*** 转换值* 字典转换 -> 字典编码* 常量转换 -> 常量值，格式："{key1:value1,key2:value2,...}"，如："{1:是,0:否}"* 枚举转换 -> 枚举类路径*//*** 转换目标字段名* 默认：原字段名 + "Str"* 如果转换对象不存在该名的字段属性，不会报错*//*** 是否自动转换* true：AOP自动转换* false：需要手动调用转换*//**]]></description><category></category></item><item><title><![CDATA[linux部署es]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/151140796</link><guid>https://blog.youkuaiyun.com/String_001/article/details/151140796</guid><author>String_001</author><pubDate>Wed, 03 Sep 2025 10:49:52 +0800</pubDate><description><![CDATA[某些 Linux 发行版可能会使用 /etc/security/limits.d/ 下的配置文件来覆盖 /etc/security/limits.conf 的设置。如果存在这种情况，可以在该目录下创建一个新的配置文件（例如 99-elasticsearch.conf），并将上述配置添加到其中。下载./config/certs文件夹下的http_ca.crt。找到本地 Java 的 cacerts 路径。编辑 /etc/sysctl.conf 文件。生成节点证书 es根目录下执行。]]></description><category></category></item><item><title><![CDATA[springboot+mybatis拦截器+自定义注解实现业务数据权限控制、逻辑删除，分页查询存在问题修改]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/150760781</link><guid>https://blog.youkuaiyun.com/String_001/article/details/150760781</guid><author>String_001</author><pubDate>Mon, 25 Aug 2025 10:14:05 +0800</pubDate><description><![CDATA[springboot+mybatis拦截器+自定义注解实现业务数据权限控制、逻辑删除，分页查询存在问题修改]]></description><category></category></item><item><title><![CDATA[springAi+阿里云百炼平台+deepseek，在业务系统中接入ai智能体，实现对业务方面的问答]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/149090971</link><guid>https://blog.youkuaiyun.com/String_001/article/details/149090971</guid><author>String_001</author><pubDate>Sat, 05 Jul 2025 13:12:21 +0800</pubDate><description><![CDATA[本文介绍了基于Spring AI框架实现业务系统AI问答功能的方案。技术选型采用SpringBoot+Spring AI，集成阿里云百炼deepseek-r1文本模型和Elasticsearch向量数据库，实现流式输出、多轮对话、业务问答等核心功能。系统通过向量数据库增强AI知识库，支持配置化相似度阈值和上下文窗口，提供Redis缓存对话记忆和MySQL持久化存储。文章包含完整的Maven依赖、YML配置和代码实现示例，适合开发者快速构建业务场景的AI对话功能。方案优势在于与Spring生态深度集成，相比直]]></description><category></category></item><item><title><![CDATA[使用ThreadPoolTaskScheduler实现定时任务调度]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/148518014</link><guid>https://blog.youkuaiyun.com/String_001/article/details/148518014</guid><author>String_001</author><pubDate>Sun, 08 Jun 2025 20:47:37 +0800</pubDate><description><![CDATA[本文介绍了在项目限制条件下使用ThreadPoolTaskScheduler实现定时任务调度的解决方案。通过配置类创建线程池，设置核心线程数、线程前缀、任务取消策略等参数，并采用CallerRunsPolicy拒绝策略确保任务执行可靠性。该方法在不引入额外框架的情况下，利用多线程机制实现了高效的定时任务调度功能，适用于框架受限的开发场景。]]></description><category></category></item><item><title><![CDATA[java设计者模式：原型模式]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/148517412</link><guid>https://blog.youkuaiyun.com/String_001/article/details/148517412</guid><author>String_001</author><pubDate>Sun, 08 Jun 2025 20:07:03 +0800</pubDate><description><![CDATA[原型模式通过复制现有对象生成新实例，避免直接实例化类的开销，适用于需要大量创建对象或创建复杂对象的场景。该模式核心优势在于降低对象创建成本，提高效率。典型应用包括：1)游戏开发中批量生成基础属性相同的角色实例（如小怪）；2)循环场景中复用对象模板，仅修改差异属性。实现时需继承Cloneable接口并重写clone()方法，默认实现为浅拷贝。这种模式特别适用于对象初始化成本高或存在大量相似对象实例的情况。]]></description><category></category></item><item><title><![CDATA[java设计者模式：责任链模式]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/148516308</link><guid>https://blog.youkuaiyun.com/String_001/article/details/148516308</guid><author>String_001</author><pubDate>Sun, 08 Jun 2025 19:39:12 +0800</pubDate><description><![CDATA[责任链模式的作用在于将多个行为串成一条线，让他们有顺序的执行下去，通常是线性结构，也可以是环形结构、树状结构，但是需要其它的设计支持。
责任链模式主要元素：处理者接口、抽象处理类、具体实现类。
优点：扩展性、解耦、动态调整顺序。]]></description><category></category></item><item><title><![CDATA[java设计者模式：策略模式+工厂模式]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/148431955</link><guid>https://blog.youkuaiyun.com/String_001/article/details/148431955</guid><author>String_001</author><pubDate>Wed, 04 Jun 2025 18:07:05 +0800</pubDate><description><![CDATA[举一个常见的例子：支付功能，支付的方式存在微信、支付宝、银行卡等等。假设项目开始客户只需要微信支付，那么你只需要正常写微信支付的逻辑即可，后面客户又想要加一个支付宝支付，这时候加个if条件判断，然后加上支付宝的支付逻辑就行，再后面又想加银行卡支付、抖音支付一堆支付，如果一直加if判断也是可以解决的，如果觉得所以支付的逻辑都在if代码块中，导致代码又臭又长，那么可以将各个支付的逻辑提取成方法，这样代码就看起来美观了一些，后面加一种方式就加一个支付方法，同时修改支付功能的主方法中加一个if分支。]]></description><category></category></item><item><title><![CDATA[springboot+mybatis拦截器+自定义注解实现业务数据权限控制、逻辑删除，支持多表]]></title><link>https://blog.youkuaiyun.com/String_001/article/details/148430075</link><guid>https://blog.youkuaiyun.com/String_001/article/details/148430075</guid><author>String_001</author><pubDate>Wed, 04 Jun 2025 17:14:28 +0800</pubDate><description><![CDATA[表的数据权限由多个字段进行控制，并不是固定的部门、角色、用户id等，并且是否进行过滤因角色而异。字段a、b、c可以是部门id、用户id、岗位id、部门编码等等，假设字段a存储是部门id，字段b存储的是岗位id，那么角色1查询时候，就只能查询到其自身部门及岗位的信息。某些特殊情况不进行过滤的问题，（1）可以使用再自定义一个方法级的注解，在方法上标记注解，然后在过滤器中判断是否含有该标记（2）在构造sql时候，在sql上添加特殊标记，在过滤时判断是否存在特殊标记，存在则去除该标记，并且不追加过滤条件。]]></description><category></category></item></channel></rss>