让遗留 Python 工程拥有 Java 级工业强度——类型安全、百万级并发、云原生就绪——而成本只是一杯咖啡的时间。
| 维度 | Python | → | Spring Boot |
|---|---|---|---|
| 框架 | Flask / Django / FastAPI | → | Spring MVC / Spring WebFlux |
| ORM | SQLAlchemy / Django ORM | → | Spring Data JPA / MyBatis |
| 配置 | .env / settings.py |
→ | application-{profile}.yml |
| 依赖 | requirements.txt |
→ | Maven pom.xml / Gradle build.gradle.kts |
| 并发 | GIL 受限 | → | Reactor / Virtual Thread(Project Loom) |
| 部署 | Gunicorn + Supervisor | → | Docker + Kubernetes + GraalVM Native Image |
pip install py2spring
py2spring transform ./my-flask-app --out ./coffee-shop-sb --java 21 --spring 3.230 秒后,你将得到一个可直接 ./mvnw spring-boot:run 的 Java 项目,并包含:
- 等价的 REST 端点(OpenAPI 3 规范自动生成)
- 类型安全的 DTO / Entity(借助 MapStruct 自动映射)
- 单元测试 & 集成测试骨架(JUnit 5 + Testcontainers)
- GitHub Actions CI/CD(构建多架构 Docker 镜像并推送至 GHCR)
| Python | Java (Spring Boot) |
|---|---|
@app.get("/orders/<id>")
def get_order(id: UUID):
order = db.session.get(Order, id)
if not order:
abort(404)
return order_schema.dump(order) |
@GetMapping("/orders/{id}")
public OrderDto getOrder(@PathVariable UUID id) {
return orderRepo.findById(id)
.map(mapper::toDto)
.orElseThrow(ResourceNotFoundException::new);
} |
| 里程碑 | 交付功能 | 时间线 |
|---|---|---|
| v0.1 | Flask → Spring Boot 3.x | 2024 Q4 |
| v0.2 | Django / FastAPI 支持 | 2025 Q1 |
| v0.3 | 多版本 JDK(8/11/17/21)& Spring Boot 2.x/3.x 矩阵 | 2025 Q2 |
| v0.4 | 前端联动:自动迁移 React/Vue 路由至 Spring Boot + Vite | 2025 Q3 |
| v1.0 | 双向同步(Java → Python),实现混合团队无缝协作 | 2025 Q4 |
py2spring plugin install mybatis-plus
py2spring plugin install sa-token # 国产权限框架插件市场持续开放,欢迎提交插件。
我们采用 RFC- style 提案:任何 >100 LOC 的变更需先提交 Py2Spring RFC。
开发环境一键启动:
git clone https://github.com/yourname/Py2Spring.git
make dev # 自动拉起 Python 3.11 + Java 21 的 devcontainer
make test # 全量单元 + 集成测试(含 200+ 真实开源项目样本)灵感来源于:
- sqlc(SQL → 类型安全代码)
- GraalVM(静态编译打破 Java 冷启动)
- OpenAPI Generator(契约优先的最佳实践)
MIT © 2024 Py2Spring Contributors
我们站在巨人的肩膀上,也欢迎成为新的巨人。
一句话总结:
Py2Spring 不是简单的“翻译器”,而是一套面向云原生的、双向可同步的“语言无关中间件编译平台”——今天它把 Python 搬进 Java,明天它可以把任何语言搬进任何框架。
