Metadata-Version: 2.4
Name: springbootAI
Version: 2.3.6
Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
Author-email: YuConggen <1516933915@qq.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/YUCONGGEN/springbootAI
Project-URL: Repository, https://github.com/YUCONGGEN/springbootAI.git
Project-URL: Documentation, https://github.com/YUCONGGEN/springbootAI#readme
Project-URL: Changelog, https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md
Project-URL: Issues, https://github.com/YUCONGGEN/springbootAI/issues
Keywords: spring,springboot,mybatis,orm,web,framework,python,ai,langchain,langgraph,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Database
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi==0.141.1
Requires-Dist: uvicorn==0.39.0
Requires-Dist: websockets==15.0.1
Requires-Dist: pyyaml==6.0.3
Requires-Dist: python-dotenv==1.2.2
Requires-Dist: DBUtils==3.1.2
Requires-Dist: cryptography==50.0.0
Requires-Dist: bcrypt==5.0.0
Requires-Dist: pyjwt==2.13.0
Requires-Dist: pydantic==2.13.4
Requires-Dist: requests==2.34.2
Requires-Dist: httpx==0.28.1
Requires-Dist: defusedxml==0.7.1
Provides-Extra: mysql
Requires-Dist: PyMySQL==1.2.0; extra == "mysql"
Provides-Extra: postgresql
Requires-Dist: psycopg2-binary==2.9.12; extra == "postgresql"
Provides-Extra: sqlalchemy
Requires-Dist: sqlalchemy==2.0.40; extra == "sqlalchemy"
Provides-Extra: redis
Requires-Dist: redis==8.1.0; extra == "redis"
Provides-Extra: rabbitmq
Requires-Dist: pika==1.4.4; extra == "rabbitmq"
Provides-Extra: kafka
Requires-Dist: kafka-python==2.0.2; extra == "kafka"
Provides-Extra: nacos
Requires-Dist: nacos-sdk-python==2.0.11; extra == "nacos"
Provides-Extra: prometheus
Requires-Dist: prometheus-client==0.26.0; extra == "prometheus"
Provides-Extra: logging
Requires-Dist: loguru==0.7.3; extra == "logging"
Provides-Extra: ast
Requires-Dist: sqlglot==27.28.1; extra == "ast"
Provides-Extra: excel
Requires-Dist: openpyxl==3.1.5; extra == "excel"
Provides-Extra: ai
Requires-Dist: langchain-openai==1.4.2; extra == "ai"
Requires-Dist: langchain-core==1.5.4; extra == "ai"
Requires-Dist: langchain-classic==1.0.8; extra == "ai"
Requires-Dist: langchain-text-splitters==1.1.2; extra == "ai"
Requires-Dist: langchain-community==0.4.2; extra == "ai"
Requires-Dist: numpy==2.2.6; extra == "ai"
Requires-Dist: pydantic==2.13.4; extra == "ai"
Provides-Extra: langchain
Requires-Dist: langchain-openai==1.4.2; extra == "langchain"
Requires-Dist: langchain-core==1.5.4; extra == "langchain"
Requires-Dist: langchain-classic==1.0.8; extra == "langchain"
Requires-Dist: langchain-text-splitters==1.1.2; extra == "langchain"
Requires-Dist: langchain-community==0.4.2; extra == "langchain"
Requires-Dist: numpy==2.2.6; extra == "langchain"
Requires-Dist: pydantic==2.13.4; extra == "langchain"
Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "langchain"
Requires-Dist: pypdf<6,>=4.0.0; extra == "langchain"
Requires-Dist: beautifulsoup4<5,>=4.12.0; extra == "langchain"
Requires-Dist: sqlalchemy<3,>=2.0.0; extra == "langchain"
Requires-Dist: langchain-anthropic<2,>=0.2.0; extra == "langchain"
Requires-Dist: langchain-ollama<2,>=0.2.0; extra == "langchain"
Requires-Dist: langchain-chroma<2,>=0.1.0; extra == "langchain"
Requires-Dist: langchain-mistralai<2,>=0.2.0; extra == "langchain"
Requires-Dist: langchain-cohere<2,>=0.3.0; extra == "langchain"
Requires-Dist: langchain-google-vertexai<3,>=2.0.0; extra == "langchain"
Requires-Dist: langchain-deepseek<2,>=0.1.0; extra == "langchain"
Requires-Dist: langchain-zhipuai<2,>=0.0.1; extra == "langchain"
Requires-Dist: langchain-experimental<2,>=0.3.0; extra == "langchain"
Provides-Extra: langgraph
Requires-Dist: langgraph==1.2.9; extra == "langgraph"
Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "langgraph"
Provides-Extra: mcp
Requires-Dist: mcp==2.0.0; extra == "mcp"
Provides-Extra: web
Requires-Dist: fastapi==0.141.1; extra == "web"
Requires-Dist: uvicorn==0.39.0; extra == "web"
Requires-Dist: pydantic==2.13.4; extra == "web"
Requires-Dist: python-multipart==0.0.20; extra == "web"
Provides-Extra: cloud
Requires-Dist: springbootAI[web]; extra == "cloud"
Requires-Dist: springbootAI[redis]; extra == "cloud"
Requires-Dist: springbootAI[rabbitmq]; extra == "cloud"
Requires-Dist: springbootAI[kafka]; extra == "cloud"
Requires-Dist: httpx==0.28.1; extra == "cloud"
Provides-Extra: all
Requires-Dist: springbootAI[web]; extra == "all"
Requires-Dist: springbootAI[mysql]; extra == "all"
Requires-Dist: springbootAI[redis]; extra == "all"
Requires-Dist: springbootAI[rabbitmq]; extra == "all"
Requires-Dist: springbootAI[kafka]; extra == "all"
Requires-Dist: springbootAI[prometheus]; extra == "all"
Requires-Dist: springbootAI[logging]; extra == "all"
Requires-Dist: springbootAI[excel]; extra == "all"
Requires-Dist: springbootAI[ai]; extra == "all"
Requires-Dist: springbootAI[langchain]; extra == "all"
Requires-Dist: springbootAI[langgraph]; extra == "all"
Requires-Dist: springbootAI[mcp]; extra == "all"
Requires-Dist: httpx==0.28.1; extra == "all"
Requires-Dist: psutil==6.1.1; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest==9.1.1; extra == "dev"
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
Requires-Dist: redis==8.1.0; extra == "dev"
Requires-Dist: sqlglot==27.28.1; extra == "dev"
Provides-Extra: full
Requires-Dist: PyMySQL==1.2.0; extra == "full"
Requires-Dist: psycopg2-binary==2.9.12; extra == "full"
Requires-Dist: sqlalchemy==2.0.40; extra == "full"
Requires-Dist: redis==8.1.0; extra == "full"
Requires-Dist: pika==1.4.4; extra == "full"
Requires-Dist: nacos-sdk-python==2.0.11; extra == "full"
Requires-Dist: prometheus-client==0.26.0; extra == "full"
Requires-Dist: loguru==0.7.3; extra == "full"
Requires-Dist: sqlglot==27.28.1; extra == "full"
Requires-Dist: defusedxml==0.7.1; extra == "full"
Requires-Dist: requests==2.34.2; extra == "full"
Requires-Dist: httpx==0.28.1; extra == "full"
Requires-Dist: openpyxl==3.1.5; extra == "full"
Requires-Dist: langchain-openai==1.4.2; extra == "full"
Requires-Dist: langchain-core==1.5.4; extra == "full"
Requires-Dist: langchain-classic==1.0.8; extra == "full"
Requires-Dist: langchain-text-splitters==1.1.2; extra == "full"
Requires-Dist: langchain-community==0.4.2; extra == "full"
Requires-Dist: numpy==2.2.6; extra == "full"
Requires-Dist: pydantic==2.13.4; extra == "full"
Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "full"
Requires-Dist: pypdf<6,>=4.0.0; extra == "full"
Requires-Dist: beautifulsoup4<5,>=4.12.0; extra == "full"
Requires-Dist: langchain-experimental<2,>=0.3.0; extra == "full"
Requires-Dist: langchain-anthropic<2,>=0.2.0; extra == "full"
Requires-Dist: langchain-ollama<2,>=0.2.0; extra == "full"
Requires-Dist: langchain-chroma<2,>=0.1.0; extra == "full"
Requires-Dist: langchain-mistralai<2,>=0.2.0; extra == "full"
Requires-Dist: langchain-cohere<2,>=0.3.0; extra == "full"
Requires-Dist: langchain-google-vertexai<3,>=2.0.0; extra == "full"
Requires-Dist: langchain-deepseek<2,>=0.1.0; extra == "full"
Requires-Dist: langchain-zhipuai<2,>=0.0.1; extra == "full"
Requires-Dist: langgraph==1.2.9; extra == "full"
Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "full"
Requires-Dist: mcp==2.0.0; extra == "full"
Dynamic: license-file

# SpringBootAI

SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用框架。你可以使用 Python 编写 `@RestController`、`@Service`、`@Mapper` 和 `@Autowired`，框架负责组件扫描、依赖注入、Web 路由、事务切面及应用生命周期。

Web 运行时建立在 FastAPI、Starlette 和 Uvicorn 之上，同时提供 ORM、事务、缓存、消息队列、服务发现、生产治理以及 AI 生态集成。

> SpringBootAI 不是 Java Spring Boot 的 Python 绑定，也不是 Spring 官方项目。它适合熟悉 Controller、Service、Mapper 分层方式的团队，用统一写法开发 Web API、内部管理系统、数据服务和 AI 应用。

## 安装

SpringBootAI 2.3.6 支持 Python 3.10、3.11 和 3.12：

```bash
python -m pip install springbootAI
```

需要可选模块时，可以按需安装：

```bash
python -m pip install "springbootAI[ai]"
python -m pip install "springbootAI[langchain]"
python -m pip install "springbootAI[langgraph]"
python -m pip install "springbootAI[mcp]"
python -m pip install "springbootAI[mysql]"
python -m pip install "springbootAI[redis]"
```

安装全部可选能力：

```bash
python -m pip install "springbootAI[all]"
```

## 快速开始

创建应用入口 `demo/Application.py`：

```python
from springbootai.annotations import SpringBootApplication
from springbootai.main import run


@SpringBootApplication(scan_base_packages=["demo"])
class Application:
    pass


if __name__ == "__main__":
    run(Application)
```

创建控制器 `demo/controller/HelloController.py`：

```python
from springbootai.annotations import GetMapping, RequestMapping, RestController
from springbootai.web.swagger import Operation, Tag


@Tag(name="入门接口", description="确认应用已经正常运行")
@RequestMapping("/api")
@RestController
class HelloController:
    @Operation(summary="打招呼")
    @GetMapping("/hello/{name}")
    def hello(self, name: str):
        return {"message": f"Hello, {name}"}
```

创建 `demo/application.yml`，首次运行时关闭暂时不需要的外部资源：

```yaml
server:
  host: 127.0.0.1
  port: 8080

database:
  enabled: false

redis:
  enabled: false
```

启动应用：

```bash
python -m demo.Application
```

访问 `http://127.0.0.1:8080/api/hello/Alice` 验证接口，访问 `http://127.0.0.1:8080/docs` 查看 Swagger 文档。

## 核心能力

| 方向 | 能力 |
|---|---|
| Web 与 IoC | 路由映射、参数绑定、组件扫描、依赖注入、生命周期、Swagger |
| 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务和自动回滚 |
| 中间件与 Cloud | Redis、RabbitMQ、Kafka、Nacos、Feign、Gateway |
| 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断和链路追踪 |
| 安全能力 | JWT、OAuth2、CSRF、访问控制、密码加密和 SQL 注入防护 |
| AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph 和 MCP client/server |
| 测试能力 | 测试切片、MockBean、TestPropertySource、集成测试和性能测试脚本 |

## 考试认证与证书

SpringBootAI 提供配套的在线考试认证平台。学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况，并在通过考试后获得对应证书。

认证入口：[http://www.yucg.cn:8230](http://www.yucg.cn:8230)

认证内容建议重点关注：

- 安装、项目结构、启动入口、扫描包、配置文件和 Swagger。
- Controller、Service、Mapper 分层以及 Bean 注册、依赖注入和生命周期。
- PyMyBatis、动态 SQL、分页、事务边界和回滚行为。
- Profile、日志、健康检查、Prometheus、限流、熔断和测试切片。
- JWT、OAuth2、CSRF、访问控制和常见安全错误处理。
- ChatClient、Tools、RAG、LangChain、LangGraph 和 MCP。

考试规则、题量、通过标准、证书领取方式和有效期以认证平台展示为准。

## 文档

- [GitHub 项目主页](https://github.com/YUCONGGEN/springbootAI)
- [完整 README](https://github.com/YUCONGGEN/springbootAI#readme)
- [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md)
- [全部模块文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc)
- [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md)
- [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md)

## 生产使用说明

项目当前标记为 Beta。用于公网高并发、合规敏感或支付、订单、库存等核心系统前，请完成目标数据库、流量模型、故障恢复和安全基线验证。

内嵌 Gateway 适合内部路由，不替代公网 Nginx、Kong 或 WAF。Seata `distributed` 模式对接官方 TC 与 TCC 回调；`at` 模式通过 ORM 拦截器生成 `undo_log` 实现自动回滚。

## 许可证

SpringBootAI 使用 [MIT License](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)。
