当前位置:首页>java>MCP 协议深度解析|Java AI 工程化最优方案

MCP 协议深度解析|Java AI 工程化最优方案

  • 2026-08-20 16:00:50
MCP 协议深度解析|Java AI 工程化最优方案

一、前言

如果你的团队在做 Java AI 应用,大概率遇到过这个问题:大模型想调用你的业务接口查订单,你写了 Function Calling;想让它查数据库,你又写了一个工具;想让它操作文件系统,你再写一个——每接一个数据源就要写一套胶水代码,而且换个框架(SpringAI → LangChain4j)还得重写。

2024 年 11 月,Anthropic 发布了 MCP(Model Context Protocol),现在由 Linux Foundation 托管。它的目标很直接:AI 应用连接外部工具和数据源,一个协议搞定,不再重复造轮子

2026 年,Spring AI 2.0 原生集成 MCP,LangChain4j 也全面支持。Java 生态终于有了自己的 AI 工具标准协议。今天这篇文章,从协议原理到 Java 实战,把 MCP 讲透。

本文基于:Spring AI 2.0 + MCP Java SDK + JDK 21


二、技术选型 & 核心原理

MCP 是什么?

MCP(Model Context Protocol)是一个开放标准协议,定义了 AI 应用(Client)与外部工具/数据源(Server)之间的通信规范

类比理解:

  • HTTP 统一了浏览器和服务器之间的通信
  • JDBC 统一了 Java 应用和数据库之间的通信
  • MCP 统一了 AI 应用和外部工具/数据源之间的通信

没有 MCP 之前 vs 有了 MCP 之后

没有 MCP:
  你的 AI 应用 ←→ 自定义代码 ←→ 数据库
  你的 AI 应用 ←→ 自定义代码 ←→ 文件系统
  你的 AI 应用 ←→ 自定义代码 ←→ 第三方 API
  你的 AI 应用 ←→ 自定义代码 ←→ 内部微服务
  (每个连接一套代码,N 个数据源 = N 套胶水)

有了 MCP:
  你的 AI 应用 ←→ MCP Client ←→ MCP Server(数据库工具)
                              ←→ MCP Server(文件系统工具)
                              ←→ MCP Server(API 工具)
                              ←→ MCP Server(微服务工具)
  (一个协议,所有数据源统一接入)

MCP 三大核心能力

能力
说明
类比
Tools(工具)
AI 可调用的函数(查订单、执行SQL、读写文件)
类似 Function Calling
Resources(资源)
AI 可读取的数据源(文件内容、数据库表、API响应)
类似 RAG 检索
Prompts(提示词模板)
预定义的 Prompt 模板,可复用
类似 Prompt 工程库

MCP vs 传统 Function Calling

维度
Function Calling
MCP
作用范围
单次请求内
跨应用、跨进程、跨网络
工具注册
每个应用单独注册
Server 统一注册,Client 自动发现
框架绑定
绑定特定 AI 框架
协议标准,框架无关
数据源访问
仅工具调用
工具 + 资源 + 提示词三合一
安全模型
应用自行控制
协议层认证 + 权限控制
生态
各框架自建
Linux Foundation 标准,社区共建

三、整体架构 / 流程梳理

MCP 架构核心组件

┌─────────────────────────────────────────────────────┐
│                    MCP 架构全景                       │
├─────────────────────────────────────────────────────┤
│                                                      │
│  ┌──────────────┐         ┌──────────────────┐      │
│  │  AI 应用      │         │   MCP Server      │      │
│  │  (MCP Host)   │         │   (工具提供者)     │      │
│  │              │         │                  │      │
│  │  ┌────────┐  │  MCP    │  ┌────────────┐  │      │
│  │  │MCP     │  │  Protocol│  │ Tools      │  │      │
│  │  │Client  │◄─┼─────────►│  (可调用函数) │  │      │
│  │  └────────┘  │         │  ├────────────┤  │      │
│  │              │         │  │ Resources  │  │      │
│  │  ChatClient  │         │  │ (可读取数据)│  │      │
│  │  (Spring AI) │         │  ├────────────┤  │      │
│  │              │         │  │ Prompts    │  │      │
│  │              │         │  │ (提示词模板)│  │      │
│  └──────────────┘         │  └────────────┘  │      │
│                           └──────────────────┘      │
│                                   ↑                 │
│                           底层实现:                  │
│                           - 数据库(MySQL/Redis)    │
│                           - 文件系统(本地/远程)     │
│                           - API(第三方/内部)       │
│                           - 微服务(订单/库存/审批)  │
└─────────────────────────────────────────────────────┘

MCP 通信流程

1. Client 启动 → 连接 Server → 握手(交换能力清单)
2. Client 获取 Server 提供的 Tools / Resources / Prompts 列表
3. 用户提问 → ChatClient 判断需要调用工具
4. Client 通过 MCP Protocol 发送工具调用请求
5. Server 执行工具(查数据库/读文件/调API)
6. Server 返回结果 → Client 将结果注入大模型上下文
7. 大模型基于工具结果生成最终回答

四、核心代码实战(重点)

Step 1:搭建 MCP Server(暴露业务工具)

pom.xml 依赖:

<dependencies>
<!-- Spring AI MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

application.yml:

spring:
ai:
mcp:
server:
enabled:true
name:order-mcp-server
version:1.0.0
# 工具变更时自动通知 Client
tool-change-notification:true

server:
port:8081

暴露业务工具:

@Service
publicclassOrderToolService{

privatefinal OrderRepository orderRepository;

publicOrderToolService(OrderRepository orderRepository){
this.orderRepository = orderRepository;
    }

@Tool(description = "根据订单ID查询订单详细信息,返回订单状态、金额、创建时间")
public OrderInfo getOrderById(
            @ToolParam(description = "订单唯一ID")
 String orderId) 
{
return orderRepository.findById(orderId)
                .orElseThrow(() -> new OrderNotFoundException(orderId));
    }

@Tool(description = "查询用户的订单列表,支持按状态筛选")
public List<OrderInfo> getUserOrders(
            @ToolParam(description = "用户ID")
 String userId,
            @ToolParam(description = "订单状态:ALL/PENDING/PAID/SHIPPED/DONE", required = false)
            String status) 
{
if (status == null || "ALL".equals(status)) {
return orderRepository.findByUserId(userId);
        }
return orderRepository.findByUserIdAndStatus(userId, status);
    }

@Tool(description = "统计用户订单总金额")
public BigDecimal getUserOrderTotal(
            @ToolParam(description = "用户ID")
 String userId) 
{
return orderRepository.sumAmountByUserId(userId);
    }
}

注册 MCP Server:

@Configuration
publicclassMcpServerConfig{

@Bean
public ToolCallbackProvider orderTools(OrderToolService orderToolService){
return MethodToolCallbackProvider.builder()
                .toolObjects(orderToolService)
                .build();
    }
}

验证 MCP Server 是否启动:

# 查看 MCP Server 能力清单
curl http://localhost:8081/mcp/health

# 查看可用工具列表
curl http://localhost:8081/mcp/tools

# 预期返回:
# [
#   {"name": "getOrderById", "description": "根据订单ID查询订单详细信息..."},
#   {"name": "getUserOrders", "description": "查询用户的订单列表..."},
#   {"name": "getUserOrderTotal", "description": "统计用户订单总金额"}
# ]

Step 2:搭建 MCP Client(消费远程工具)

pom.xml:

<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
</dependency>
</dependencies>

application.yml:

spring:
ai:
openai:
api-key:${DASHSCOPE_API_KEY}
base-url:https://dashscope.aliyuncs.com/compatible-mode/v1
chat:
options:
model:qwen-plus

mcp:
client:
enabled:true
name:ai-assistant-client
servers:
-name:order-tools
url:http://localhost:8081/mcp
# 可以继续添加更多 MCP Server
# - name: db-tools
#   url: http://localhost:8082/mcp
# - name: file-tools
#   url: http://localhost:8083/mcp

AI Agent 服务:

@Service
@Slf4j
publicclassAiAgentService{

privatefinal ChatClient chatClient;

publicAiAgentService(ChatClient.Builder builder,
                          McpToolCallbackProvider mcpToolProvider)
{
// ★ 关键:注入 MCP 工具回调,大模型自动发现并调用远程工具
this.chatClient = builder
                .defaultSystem("""
                    你是一个智能订单助手。你可以查询订单信息、统计订单数据。
                    回答时请引用具体数据,不要编造。
                    如果工具调用失败,告知用户具体原因。
                    "
"")
                .defaultToolCallbacks(mcpToolProvider.getToolCallbacks())
                .build();
    }

public String chat(String userMessage){
        log.info("用户提问: {}", userMessage);

        String answer = chatClient.prompt()
                .user(userMessage)
                .call()
                .content();

        log.info("AI回答: {}", answer);
return answer;
    }
}

Controller:

@RestController
@RequestMapping("/agent")
publicclassAgentController{

privatefinal AiAgentService agentService;

publicAgentController(AiAgentService agentService){
this.agentService = agentService;
    }

@GetMapping("/chat")
public String chat(@RequestParam String message){
return agentService.chat(message);
    }
}

测试验证:

# 启动 MCP Server(8081端口)
# 启动 MCP Client(8080端口)

# 测试1:直接查询
curl "http://localhost:8080/agent/chat?message=帮我查一下订单ORD-2024-001的状态"
# AI 自动调用 MCP Server 的 getOrderById 工具,返回订单详情

# 测试2:统计查询
curl "http://localhost:8080/agent/chat?message=用户U1001的订单总金额是多少"
# AI 自动调用 getUserOrderTotal 工具

# 测试3:列表查询
curl "http://localhost:8080/agent/chat?message=用户U1001有哪些待付款的订单"
# AI 自动调用 getUserOrders 工具,status=PENDING

Step 3:进阶——MCP Resources(让 AI 读取数据源)

除了工具调用,MCP 还支持 Resources——让 AI 直接读取文件、数据库表、API 响应等数据。

@Configuration
publicclassMcpResourceConfig{

// 暴露本地文件作为 MCP Resource
@Bean
public List<McpServerFeatures.SyncResourceSpecification> resources() {
return List.of(
new McpServerFeatures.SyncResourceSpecification(
new McpSchema.Resource(
"file:///docs/api-guide.md",
"API开发指南",
"text/markdown",
"项目API开发规范和最佳实践文档"
                ),
                (exchange, request) -> {
                    String content = Files.readString(Path.of("/docs/api-guide.md"));
returnnew McpSchema.ReadResourceResult(
                        List.of(new McpSchema.TextResourceContents(
"file:///docs/api-guide.md",
"text/markdown",
                            content
                        ))
                    );
                }
            )
        );
    }
}

Client 端使用:

// AI 可以主动读取这个资源
String answer = chatClient.prompt()
        .user("根据API开发指南,我应该怎么设计REST接口的返回格式?")
        .call()
        .content();
// AI 会自动通过 MCP 读取 file:///docs/api-guide.md 的内容,然后基于文档回答

Step 4:生产级 MCP 安全与治理

@Configuration
publicclassMcpSecurityConfig{

// MCP Server 端点权限控制
@Bean
public SecurityFilterChain mcpSecurityFilterChain(HttpSecurity http)throws Exception {
        http
            .securityMatcher("/mcp/**")
            .authorizeHttpRequests(auth -> auth
// 健康检查公开
                .requestMatchers("/mcp/health").permitAll()
// 工具列表需要认证
                .requestMatchers("/mcp/tools").authenticated()
// 工具调用需要特定角色
                .requestMatchers("/mcp/tools/call").hasRole("AI_AGENT")
                .anyRequest().authenticated()
            )
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
return http.build();
    }

// MCP 工具调用审计日志
@Bean
public ToolCallbackProvider auditedOrderTools(OrderToolService orderToolService){
        ToolCallbackProvider provider = MethodToolCallbackProvider.builder()
                .toolObjects(orderToolService)
                .build();

// 包装一层审计
returnnew AuditingToolCallbackProvider(provider);
    }
}

// 审计包装器:记录每次工具调用
publicclassAuditingToolCallbackProviderimplementsToolCallbackProvider{
privatefinal ToolCallbackProvider delegate;

@Override
public ToolCallback[] getToolCallbacks() {
        ToolCallback[] callbacks = delegate.getToolCallbacks();
return Arrays.stream(callbacks)
                .map(AuditingToolCallback::new)
                .toArray(ToolCallback[]::new);
    }
}

五、问题排查 & 踩坑总结

问题
原因
解决方案
MCP Server 启动后 /mcp/tools 返回空
@Tool
 注解未被扫描
确保 @Service 类被 Spring 扫描到
Client 连不上 Server
URL 配置错误或 Server 未启动
检查 spring.ai.mcp.client.servers[].url
工具调用超时
工具方法执行时间过长
给工具方法加超时,异步处理
大模型不调用工具
System Prompt 未引导
在 Prompt 中明确告知可用工具列表
工具参数映射错误
@ToolParam
 描述不准确
参数描述要清晰,类型要匹配
MCP 端点返回 403
安全认证未配置
检查 SecurityFilterChain 配置
多 Server 工具冲突
不同 Server 有同名工具
工具名加前缀区分,如 order_getOrderById
虚拟线程与 MCP 冲突
WebFlux + 虚拟线程不兼容
WebMvc 项目开虚拟线程,WebFlux 暂不开

六、效果演示 & 价值总结

MCP 带来的改变:

之前:每个 AI 应用 × 每个数据源 = N×M 套胶水代码
之后:每个数据源实现一次 MCP Server,所有 AI 应用复用

之前:换框架(SpringAI → LangChain4j)= 重写所有工具
之后:MCP 协议标准,框架无关,工具不变

之前:AI 只能调用当前应用的本地方法
之后:AI 可以调用网络上任何 MCP Server 暴露的工具

企业级价值:

维度
价值
标准化
一个协议连接所有数据源,不再重复造轮子
解耦
AI 应用与业务系统解耦,各自独立演进
安全
协议层认证 + 权限控制 + 审计日志
生态
社区共建 MCP Server,工具库越来越丰富
可观测
每次工具调用可追踪、可审计

MCP 生态现状(2026年7月):

  • Spring AI 2.0 原生支持(Server + Client)
  • LangChain4j 全面支持
  • MCP Java SDK 由 Spring AI 团队维护
  • Linux Foundation 托管,标准化进程加速
  • 社区已有数据库、文件系统、Git、Docker 等现成 MCP Server
更多AI后端技术干货,请关注葵花哥

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 12:25:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/508330.html
  2. 运行时间 : 0.201483s [ 吞吐率:4.96req/s ] 内存消耗:4,852.75kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b14f384704c069fd57a7fec5ce1ed9d3
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001062s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001790s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000673s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000717s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001691s ]
  6. SELECT * FROM `set` [ RunTime:0.000601s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001524s ]
  8. SELECT * FROM `article` WHERE `id` = 508330 LIMIT 1 [ RunTime:0.009759s ]
  9. UPDATE `article` SET `lasttime` = 1787286358 WHERE `id` = 508330 [ RunTime:0.013598s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000793s ]
  11. SELECT * FROM `article` WHERE `id` < 508330 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001222s ]
  12. SELECT * FROM `article` WHERE `id` > 508330 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001255s ]
  13. SELECT * FROM `article` WHERE `id` < 508330 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001584s ]
  14. SELECT * FROM `article` WHERE `id` < 508330 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001748s ]
  15. SELECT * FROM `article` WHERE `id` < 508330 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003443s ]
0.204581s