- 博客(105)
- 资源 (3)
- 收藏
- 关注
原创 `mapper-locations` 和 `@MapperScan`区别
摘要:@MapperScan和mapper-locations是MyBatis/MyBatis-Plus中两个独立但必须配合使用的配置。@MapperScan负责扫描Mapper接口并注册到Spring容器(解决NoSuchBeanDefinition问题),而mapper-locations负责加载XML文件中的SQL语句(解决Invalid bound statement问题)。二者缺一不可,在多模块场景中需特别注意路径配置:@MapperScan要覆盖所有子模块的Mapper包,mapper-loca
2025-12-10 10:23:46
520
原创 排查XML文件是否被MyBatis/MyBatis-Plus扫描到
摘要 排查MyBatis/MyBatis-Plus是否扫描到XML文件,可按以下步骤逐步验证: 验证XML文件是否被打包到classpath:检查target/classes或jar包中是否存在目标XML文件,确认文件路径和大小写正确。 检查mapperLocations配置:确保配置路径能匹配XML实际位置,注意/**/和/*/的区别,路径结尾需加*.xml。 开启MyBatis日志:通过日志查看是否出现Parsing Mapper XML关键词,确认XML是否被成功加载。 代码层面验证:通过SqlSes
2025-12-10 09:53:54
831
原创 Java多线程异步等问题【2】
CompletableFuture 解决了原生 Future 的三大痛点:通过非阻塞回调避免主线程阻塞,支持链式调用处理异步结果,提供多任务组合能力。原生 Future 必须通过阻塞 get() 获取结果,无法优雅处理多任务协同和异常。而 CompletableFuture 实现了真正的异步编程,通过回调机制和丰富的组合方法,显著提升了代码效率和可读性。
2025-11-28 12:05:53
361
原创 Java多线程异步等问题【1】
Java异步编程的核心是多线程实现,主要方式包括:1)继承Thread类(简单但扩展性差);2)实现Runnable接口(解耦任务与线程);3)Callable+Future/FutureTask(支持返回值);4)线程池(生产首选,复用线程资源)。进阶方案推荐CompletableFuture(JDK8+),支持非阻塞回调、链式调用和多任务组合,大幅简化异步编程。关键注意线程安全、资源管理和异常处理,合理选择实现方式可提升系统并发性能。
2025-11-28 11:58:19
414
原创 Playwright中用于处理浏览器上下文(BrowserContext)的存储状态
摘要:演示Playwright中浏览器上下文存储状态的保存与加载流程。第一段代码将现有上下文的cookies等状态保存到文件;第二段代码创建新上下文时从文件加载状态。示例通过Java代码实现:先保存带测试cookie的上下文状态,再创建新上下文加载该状态,验证cookie存在性,确认状态复用成功,适用于登录状态保持等场景。
2025-10-28 08:52:53
448
原创 Playwright中BrowserContext深度解析-BrowserContext方法速查手册
BrowserContext接口详解:提供操作多浏览器会话的能力,包含多个内部类属性及方法。主要属性包括清除特定域/名称/路径的Cookies选项、关闭原因说明、权限授予源控制、HAR文件路由规则等。核心方法如onBackgroundPage用于监听处理新后台页面。适用于需管理多会话、控制网络请求、处理存储状态等场景,为浏览器自动化测试和调试提供强大支持。(150字)
2025-10-27 22:23:43
463
原创 Playwright中Browser的实现类深度解析-Browser方法速查手册
Browser是一个Java接口,继承自AutoCloseable,主要用于浏览器自动化操作。它提供了创建浏览器上下文、页面和追踪等功能,包含多个配置类: CloseOptions:设置浏览器关闭原因 NewContextOptions:配置浏览器上下文,包括下载策略、基础URL、CSP绕过、证书认证、颜色主题、设备缩放等 NewPageOptions:页面配置选项 StartTracingOptions:追踪配置 主要应用场景包括网页自动化测试、不同设备/主题模拟、网络请求录制等,支持设置代理、权限、区域
2025-10-27 22:10:49
333
原创 Playwright中FrameImpl的实现类深度解析-FrameImpl 方法速查手册(二)
FrameImpl 核心方法速查手册 本手册按功能模块分类整理 FrameImpl 核心方法,适用于 Playwright 自动化测试和爬虫开发快速查询: 元素查询 querySelector() 定位单个元素 querySelectorAll() 批量获取元素 queryCount() 统计匹配元素数量 交互操作 基础交互:click(), hover(), type(), press() 表单操作:fill(), selectOption(), setInputFiles() 高级功能:dragAndD
2025-10-16 09:54:30
367
原创 Playwright中FrameImpl的实现类深度解析-FrameImpl 方法解析
FrameImpl 是 Playwright for Java 中 Frame 接口的核心实现类,负责封装浏览器框架(如 iframe)的 DOM 操作、导航和状态管理功能。其方法主要分为七大类:构造方法初始化框架实例,元素查询通过选择器定位 DOM 元素,元素操作模拟用户交互(如点击、输入、拖拽),表单处理(如填充、选择选项),页面内容控制(获取/修改 HTML、注入脚本),框架导航管理(URL 跳转、加载状态)以及父子框架关系维护。基于 Playwright 的 ChannelOwner 进程间通信架构
2025-10-16 09:51:36
938
原创 Playwright中 Locator的实现类深度解析-LocatorImpl 方法解析文档
LocatorImpl是Playwright框架中的核心元素定位器实现类,负责页面元素的定位、查询、操作和断言。它通过FrameImpl实例管理元素所在的页面框架,提供丰富的元素操作方法,包括:1)元素集合查询(all()、count()等);2)定位器组合(and()、or()等);3)属性/文本查询(getAttribute()、innerText()等);4)状态检查(isVisible()、isChecked()等);5)交互操作(click()、fill()等)。所有操作都支持选项配置,并严格确保
2025-10-16 09:38:05
712
原创 Playwright中page的实现类深度解析-PageImpl 方法作用解析
本文解析了Playwright Java中PageImpl类的核心功能,主要分为事件管理和页面生命周期管理两大模块。事件管理部分详细介绍了30多个事件监听方法,包括页面关闭、控制台消息、对话框、下载等事件的绑定与移除机制,均通过ListenerCollection实现。生命周期管理部分重点说明页面关闭流程,包括上下文处理、通道消息发送和状态变更。整体结构清晰,方法按功能分类呈现,辅以关键实现细节说明,便于开发者快速理解Playwright页面操作的核心机制。
2025-10-16 00:04:07
929
原创 Playwright Page 中 wait 相关 API 解析与运用场景
Playwright 的 Page 类提供了一系列 wait 相关 API,用于确保自动化脚本的稳定性。这些 API 分为四类:事件等待(如弹窗、下载、控制台日志)、元素状态等待(如可见性、DOM 存在)、导航与 URL 等待(如页面跳转)以及通用条件等待。核心功能是阻塞执行直到特定条件满足,避免因异步加载导致的错误。例如,waitForPopup 处理弹窗,waitForSelector 确保元素可见,waitForURL 验证页面跳转。这些 API 通过设置超时、状态过滤等参数,灵活适配不同场景,是自动
2025-09-30 09:42:42
1166
原创 【源码解析】spring-ai-alibaba-jmanus的AbstractPlanExecutor
摘要 executeAllStepsAsync是AbstractPlanExecutor的核心异步执行方法,用于并发处理计划中的所有步骤。该方法通过深度隔离的线程池管理资源,支持嵌套计划执行。主要流程包括:1)根据计划深度获取线程池;2)异步执行所有步骤并收集结果;3)记录执行过程;4)异常处理和资源清理。该方法通过CompletableFuture返回执行结果,包含步骤详情和状态,实现了高效可靠的异步计划执行机制,适用于复杂任务的并发处理场景。
2025-09-25 11:01:34
923
原创 【源码解析】spring-ai-alibaba-jmanus的PlanExecutorFactory
该摘要描述了PlanExecutorFactory工厂类的createExecutor方法,其核心功能是根据计划类型动态创建对应的执行器实现。方法主要流程包括:参数校验→优先处理直接响应类型→提取计划类型→根据类型创建执行器(简单/高级/动态工具)→返回实例。该方法体现了工厂模式,封装了对象创建逻辑,支持动态适配不同计划类型并保证扩展性。关键点在于直接响应类型的优先处理、对未知类型的容错机制以及详细的日志跟踪。
2025-09-25 10:43:45
449
原创 【源码解析】spring-ai-alibaba-jmanus的ModelDataInitialization
本文介绍了一个名为ModelDataInitialization的Spring服务类,主要用于在应用启动时自动初始化AI模型配置数据。该类的核心功能包括:通过检查环境变量和配置系统为AI模型创建默认配置并存储到数据库,同时通过事件机制通知模型配置变化。类结构上标记为@Service并实现IModelDataInitialization接口,依赖LlmService、JmanusEventPublisher等服务。主要方法init()会在Spring容器初始化后自动执行,包含从环境变量和配置系统初始化模型的逻
2025-09-23 21:22:24
812
原创 巨坑Spring ai 之spring-ai-starter-vector-store-elasticsearch
摘要:开发者在构建Spring AI RAG Demo时遇到版本兼容问题,发现Elasticsearch向量存储与Doubao embedding模型存在维度冲突(2560 vs ES最大2048)。尽管在配置中指定了模型参数,但实际调用EmbeddingModel时未正确应用这些设置,导致只能强制使用2048维度的模型。核心问题在于Spring AI的EmbeddingOptionsBuilder未将配置参数传递给底层模型,使维度设置失效。
2025-09-22 17:47:24
358
原创 WebSocket通信:sockjs与stomp.js的完美搭档
摘要: sockjs 和 stomp.js 在 WebSocket 通信中协同作用。sockjs 作为传输层库,通过自动降级机制确保兼容性连接(支持 WebSocket/HTTP 轮询等);stomp.js 作为协议层库,基于 STOMP 协议标准化消息交互(定义订阅/发布等规则)。两者的结合实现了“底层可靠连接+上层规范通信”,适用于复杂业务场景(如实时聊天),由 sockjs 建立连接后,stomp.js 负责结构化消息处理,形成完整的 WebSocket 解决方案。
2025-08-21 17:35:10
498
原创 vue实战-组件触发流程
摘要:通过Vue 3的ref机制,lg-transport-info-list组件引用LgTransportRemark组件实例。调用showRemark函数时,触发被引用组件的show方法,该方法执行数据获取后,将响应式变量visibleFlag设为true,从而控制模态框显示。整个过程实现了组件间的交互与模态框的开关逻辑,核心依赖ref引用和响应式状态管理。
2025-07-01 14:35:37
265
原创 Java 线程的堆栈跟踪信息
Java 线程的堆栈跟踪信息展示了线程的当前状态和执行位置。以 Thread-0 为例,其状态为 TIMED_WAITING,正在执行 Thread.sleep() 方法,表示线程处于限时等待状态,预计休眠 1 秒后继续执行。堆栈信息显示了 TestJoin 类的 run() 方法在第 9 行调用了 sleep(),推测代码中显式设置了线程休眠。常见场景包括定时任务或资源等待。线程的基本信息包括名称、编号、优先级、CPU 时间、运行时间、线程 ID 等,帮助开发者了解线程的运行状态和资源占用情况。
2025-05-12 22:39:24
405
原创 【二】CURL命令解析
本文解析了一个使用 curl 命令向快手 GraphQL 接口发送请求的示例。该请求通过多个请求头参数传递了客户端信息、语言偏好、缓存控制、跨域设置等。其中,Cookie 包含了用户身份和设备信息,Origin 和 Referer 用于跨域验证和来源追踪,User-Agent 标识了客户端环境。此外,Sec-Fetch 系列头用于声明跨域请求模式,sec-ch-ua 系列头提供了浏览器指纹信息。请求体为 JSON 格式,包含 GraphQL 查询语句,用于搜索与关键词相关的视频内容。该命令展示了如何通过 c
2025-05-09 15:59:31
992
原创 【一】浏览器的copy as fetch和copy as bash的区别
在浏览器的开发者工具中,copy as fetch 和 copy as bash 是两种不同的复制网络请求的方式。copy as fetch 会将请求复制为 JavaScript 的 fetch 函数调用,适用于在浏览器或 Node.js 环境中直接执行。而 copy as bash 则将请求复制为 curl 命令,适用于在命令行中执行。两者的主要区别在于输出格式和使用场景:fetch 适用于 JavaScript 环境,而 curl 适用于命令行操作。
2025-05-09 15:46:43
1363
原创 chrome extension开发框架WXT之Browser.runtime
通过合理组合这些方法,开发者可实现扩展的通信、配置管理、生命周期控制等核心功能,满足不同场景下的需求。
2025-04-09 12:49:49
1290
原创 chrome extension开发框架WXT之WXT Storage api解析【补充说明一】
在defineItem方法里,fallbackinitversion和migrations这些参数能够让你对存储项进行更为细致的设置,像设定默认值、初始化值、版本控制以及数据迁移等操作。fallback。
2025-04-09 11:23:39
648
原创 chrome extension开发框架WXT之WXT Storage api解析
chrome extension开发框架WXT之WXT Storage api解析
2025-04-09 11:18:12
738
原创 chrome插件开发之封装好用组件-communicator.js
这个工具类 communicator.js封装了 Chrome 扩展中用于组件通讯的三个 API,并提供了 10 个常用的方法,方便程序员在开发 Chrome 扩展时进行组件间的通讯
2025-03-28 13:42:02
904
原创 chrome插件开发之API解析-chrome.scripting.executeScript()
在使用开发 Chrome 扩展时,是一个非常重要的 API,用于在目标标签页中注入 JavaScript 脚本。
2025-03-24 19:29:53
1712
原创 chrome插件开发之API解析-chrome.tabs.query
初始环境:chrome浏览器我是打开了4个窗口,是一个功能强大的Chrome扩展API,通过合理使用queryInfo参数的各个属性,可以方便地筛选出符合不同条件的标签页,满足各种扩展开发的需求。开发者可以根据具体的业务场景灵活组合使用这些参数,实现更加丰富和实用的扩展功能。希望本文对你理解和使用有所帮助,如果你在开发过程中遇到任何问题,欢迎留言讨论。
2025-03-24 18:18:57
1107
原创 Java 版本切换工具说明文档
这是一个用于 Windows 系统的 Java 版本切换工具,可以在不同版本的 Java 之间进行永久切换。目前支持在 Java 8 和 Dragonwell 21 之间切换。管理员权限Java 安装路径自动验证日志记录环境变量设置启动脚本选择版本确认生效运行环境路径要求生效说明常见错误日志查看环境变量修改安全特性如需修改 Java 安装路径,编辑以下变量:故障排除如果切换失败:如果闪退:
2025-01-16 09:26:52
683
原创 Java 各版本下载指南
确保 Maven 使用的 JDK 版本与项目设置匹配。:在父 pom.xml 中统一定义 Java 版本。:如果使用预览特性,需要额外配置。安装完成后,可以使用提供的。下载完成后运行安装程序。
2025-01-15 20:44:08
4930
原创 谈谈 H5 移动端适配原理
H5 移动端开发的必不可少的一个环节就是移动端网页的适配,因为UI通常只会提供大小固定的设计稿,而各种不同移动设备具有不同的页面分辨率和大小,所以适配的目的就是让一份设计稿在不同移动设备上表现出一致性。虽然现如今各种插件都可以帮助我们快速配置完成,例如等等,但不少小伙伴在被问及相关原理时却很难说清楚,那么本篇文章我们就一起来探究一下其中原理吧!!!文中有不当之处,欢迎在评论区指正!!!
2024-10-18 14:53:00
1021
原创 关于vscode中settings.json中的设置
在保存文件时,先自动格式化代码,然后使用 ESLint 和其他 linter 工具尝试自动修复所有能修复的代码问题。
2024-10-03 16:07:31
2100
原创 代码生成功能-数据库查询语句
这段SQL语句是从数据库的信息模式(information_schema)中查询表的详细信息,并尝试与另一个表t_code_generator_config进行左连接以获取可能关联的配置更新时间。这个条件限制了查询的结果只包含当前数据库中的表,并且表名中包含字符串’t_category’。这一行指定了查询结果中要返回的列,包括表名、表注释、创建时间、更新时间以及从t_code_generator_config表中获取的更新时间。表中的数据添加进来,连接条件是两个表的table_name字段相等。
2024-07-31 17:11:20
422
原创 my.ini配置文件中port有什么作用?
在大多数情况下,[client] 和 [mysqld] 中的 port 参数应该是相同的,这样客户端才能成功连接到服务器。如果它们不同,客户端将尝试连接到由 [client] port 指定的端口,而服务器则在 [mysqld] port 指定的端口上监听。如果两个端口不一致,连接将会失败,除非你显式地在客户端连接命令中指定了正确的端口号。如果你有多个MySQL服务器实例运行在不同的端口上,你可以通过修改这个参数来指定连接到特定的实例。当MySQL服务启动时,它会在指定的端口上监听来自客户端的连接请求。
2024-07-23 17:36:19
712
1
原创 使用vue router需要注意的点
Vue Router 支持多种历史模式来管理应用的导航和URL状态。主要的两种模式是 hash 模式和 history 模式。每种模式都有其特定的用途和适用场景。
2024-07-17 11:10:17
482
原创 Object 的属性描述符
描述符key说明反转状态数据描述符,访问器描述符是否可更改描述符类型+删除DontDelete数据描述符属性的值,是否可修改值(赋值)Read-only访问器描述符get set。
2024-05-01 17:49:06
718
原创 什么是prettier的glob 模式
在 Prettier 的配置文件(如 .prettierrc.js、.prettierrc.json 或 package.json 中的 prettier 字段)中,您可以使用 overrides 部分来定义包含 glob 模式的对象,从而指定特定文件或文件集的格式化规则。通过 glob 模式,Prettier 可以灵活地处理项目中不同类型的文件,确保仅对需要格式化的文件应用规则,同时避免对不应格式化的文件(如第三方库、特定测试文件等)造成影响。(感叹号):用于否定前面的模式,排除匹配到的文件。
2024-04-26 22:18:51
715
1
原创 如何配置 Prettier 配置文件,确保其中的文件 glob 模式能够正确包含 postcss.config.js 文件
确认 Prettier 配置文件的存在: 确认您的项目中已有 Prettier 的配置文件,通常是 .prettierrc、.prettierrc.json、.prettierrc.yml、.prettierrc.js 或者直接在 package.json 文件中添加一个 prettier 字段。如果您的项目中只有一个 postcss.config.js 文件,并且您希望将其与项目中的其他 JavaScript 文件采用相同的格式化规则,通常不需要专门为其添加 overrides。// 其他通用配置…
2024-04-26 22:16:41
744
1
原创 出现错误✖ prettier --write: [error] No files matching the pattern were found: “D:/code/xx/postcss.config
这个错误信息表示 Prettier 在尝试格式化文件 D:/code/xx/postcss.config.js 时未能找到匹配的文件。
2024-04-26 21:57:43
1162
VSCode Cache Cleaner这是一个用于清理 VSCode 缓存文件的实用脚本 该脚本可以帮助你清理 VSCode 的各种缓存文件,释放磁盘空间,有时也可以解决一些 VSCode
2025-01-03
业务系统的微服务化改造方案.pdf 利用网页在邮件微信平台群发.pdf 图像理解中的卷积神经网络.pdf 图说设计模式.pdf 基于深度神经网络的股票智能预测系
2021-07-30
完美卸载win10小娜卸载工具Uninstall Cortana.zip
2021-07-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅