fix(mcp): 修正启动顺序——工具注册必须先于作用域绑定
根因(源码级):ToolSyncService 没有 @Order,默认 LOWEST_PRECEDENCE(最后执行); ScopeToolSyncService 写了 @Order(2)(最先执行)。于是绑定跑在注册之前: - tool 表里已有的工具 → 能查到 → 绑上(实测 3 个) - 本次启动才注册的工具 → 查不到 → 跳过(district.paper.statistics.query) 现象完全对应:同一批 4 个工具,3 个进作用域,1 个缺失。 修复:给 ToolSyncService 显式 @Order(1),ScopeToolSyncService 保持 @Order(2), 并在注释里写清依赖关系,避免后来者再改错。 验证:编译通过;ScopeToolSyncServiceTest 5 例全过。
This commit is contained in:
@@ -35,7 +35,7 @@ import java.util.List;
|
||||
* <p>安全约束:只新增、不删除;作用域或工具不存在时记警告并跳过(不阻断启动)。</p>
|
||||
*/
|
||||
@Component
|
||||
@Order(2) // 必须在 ToolSyncService(@Order 缺省最低)之后,确保 tool 表已有记录
|
||||
@Order(2) // 必须在 ToolSyncService(@Order(1)) 之后:它负责把工具写进 tool 表
|
||||
public class ScopeToolSyncService implements ApplicationRunner {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ScopeToolSyncService.class);
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
@@ -20,6 +21,7 @@ import java.util.Objects;
|
||||
* 但保留管理员手动设置的 status,且不删除任何已有工具。
|
||||
*/
|
||||
@Component
|
||||
@Order(1) // 必须先于 ScopeToolSyncService(2):后者按 tool 表里的 name 建立作用域绑定
|
||||
public class ToolSyncService implements ApplicationRunner {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ToolSyncService.class);
|
||||
|
||||
Reference in New Issue
Block a user