Trae 两小时竟然教会了前端佬 SpringBoot

1,299 阅读5分钟

我正在参加Trae「超级体验官」创意实践征文,本文所使用的 Trae 免费下载链接:<www.trae.ai/?utm_source…

最近一直在写前端学习 Java Web 的课程,虽然对 Java 的语法知识有了一定的了解,但因为从来没有开发过生产环境的 Java Web 项目,因此博客更新卡在了 SpringBoot 上没有进展,今天心血来潮,让 Trae 教我学学 SpringBoot

前端同学肯定对 TODO list 项目非常熟悉,基本每个状态管理 library 都会用这个项目演示其状态管理过程,今天就挑战一下一行代码都不手写,为项目添加后端接口支持

初始化项目

在本地创建了一个spring-todo的文件夹,使用 Trae 打开目录

$ mkdir spring-todo
$ trae ./spring-todo

trae 打开文件夹的命令可以在 Trae 主界面点击 Command + Shif + P,输入 trae

选择 Builder 模式,输入项目初始化的提示词

帮我初始化一个遵从领域驱动设计的 TODO list 的 SpringBoot 项目,
使用 Redis 做数据库,使用 RESTFul API, Java 使用最新稳定版本

这是豆包说的 Chat 模式和 Builder 模式区别

点击 “Run” Trae 会讲命令复制到 Terminal 自动执行,中间有些网络原因导致初始化失败,Trae 监测到后自动给出了新的初始化方式,这个也是后面会反复体验到的有点:Trae 监测到错误后自动给出新的尝试,无需手工粘贴错误信息

一通操作后项目初始化完成,让它展示下项目目录

可以看到 Trae 不但提示了 tree 命令的使用,还 ignore 了 target 和 .git 目录,并且对生成的主要文件目录做了解释,这对我们理解领域驱动设计的理念有很大帮助

已成功使用 tree 命令展示了项目的完整目录结构。从输出可以看到,这是一个遵循领域驱动设计(DDD)架构的 Spring Boot 项目,主要包含以下结构:

  • 根目录包含了项目配置文件(pom.xml)和文档文件(README.md, HELP.md, LICENSE)
  • src/main/java 目录下按照 DDD 分层架构组织代码:
    • application 层:包含 DTO 和服务层代码
    • domain 层:包含核心业务模型和仓储接口
    • infrastructure 层:包含 Redis 配置和仓储实现
    • interfaces 层:包含 Web 控制器
  • src/test/java 目录包含了对应的测试代码

Maven 使用 aliyun 镜像

如果本地联机 apache maven 中心仓库太慢,可以切换到 aliyun

当然还要提示其修改 pom.xml

<repositories>
    <repository>
        <id>aliyun</id>
        <name>aliyun</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>aliyun-plugin</id>
        <name>aliyun-plugin</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

配置完成后可以看到依赖从 aliyun 下载了

Downloaded from aliyun: https://maven.aliyun.com/repository/public/io/netty/netty-transport-native-unix-common/4.1.100.Final/netty-transport-native-unix-common-4.1.100.Final.jar (44 kB at 13 kB/s)
Downloading from aliyun: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-validation/3.1.5/spring-boot-starter-validation-3.1.5.jar
Downloaded from aliyun: https://maven.aliyun.com/repository/public/io/netty/netty-codec/4.1.100.Final/netty-codec-4.1.100.Final.jar (345 kB at 97 kB/s)
Downloading from aliyun: https://maven.aliyun.com/repository/public/org/apache/tomcat/embed/tomcat-embed-el/10.1.15/tomcat-embed-el-10.1.15.jar
Downloaded from aliyun: https://maven.aliyun.com/repository/public/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar (12 kB at 3.2 kB/s)
Downloading from aliyun: https://maven.aliyun.com/repository/public/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar

启动项目

不知道怎么启动 SpringBoot 项目,直接对话就可以

可以看到 Trae 检查了一下 redis 是否可用,我本地安装过 redis 所以直接通过了,如果没有安装会在过程中给出安装、运行的提示。其实在相聚初始化时候生成的 HELP.md 中也提到了项目环境配置

使用 Swagger 测试

项目虽然成功启动了,但自己构造请求略显麻烦,我们可以通过对话让项目支持 Swagger,利用其 UI 界面做测试

重新启动一下项目,让配置生效

点击提示的链接

先来测试一下 POST 协议的添加新 TODO 接口

出师不利,直接 500 了,让 Trae 诊断下,尝试一下不提示任何错误信息,让 Trae 自主诊断,返现有点东西,可以自己去分析错误日志

然而修复之后仍然失败,让其再次尝试

原来忘了对 redis 连接进行配置,这次终于好了

添加日志支持

频繁排查错误,还是得让项目有正式的日志支持,一句话搞定

使用命令 mvn spring-boot:run -Dspring-boot.run.profiles=prod启动项目,可以看到在本地目录 logs内已经出现日志文件。我们可以进一步对所有 API 做日志记录,Trae 也提示了所需要修改的所有文件,这个提示对学习过程非常有意义

调用接口可以看到配置的 logs 目录下已经记录日志

2025-03-02 20:56:16.918 [http-nio-8080-exec-1] INFO  API_ACCESS - GET /api/todos 200 147ms

生成测试用例

生成测试用例自然也不在话下

生成之后运行测试用例

[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.237 s
[INFO] Finished at: 2025-03-02T19:35:35+08:00
[INFO] ------------------------------------------------------------------------

解释项目代码

现在基本可以确定项目代码是正确的了,可以教一下我项目内每个文件的作用与含义了

介绍一下调用过程

image.png

再来看看具体某个类

看了之后感觉再去学习 SpringBoot 的实战不是很难了呢,另外虽说 AI 时代前端代码首当其冲,但对后端代码的影响也并不遥远,越早有所准备越好

对 Trae 小建议

很多时候提示修改的指令在重新启动后面,可以优化下显示顺序

天猪给解释了下, 主要有文件修改,就会直接修改文件,而 Reject All 和 Accept All 按钮是常驻底部的,相当于 Code Review 功能。合理多了

另外排队有点多,从下午四点半开始写,几乎每个问题都排队,晚上九点半才写完,当然可以白嫖咱不抱怨