Springboot
Spring简介
基于 Java 的开放源代码应用框架,使用spring,不需要从头开始编写,只需要在类上面加上注解,Spring会自动把类实例化放进仓库,可以通过注解自动连接业务层与数据库层。
在spring中,需要将依赖的第三方库的jar包添加到类路径中,包括嵌套依赖、互相依赖的包,还有大量版本问题。
SpringBoot简介
对spring的进一步封装,自动管理依赖版本,自动化配置,减少开发工作量。内嵌Servlet容器,能把应用自动打成jar包启动,简化应用运行
SpringBoot运行过程
启动
main() ↓ SpringApplication.run() ↓ 创建 Spring 容器(ApplicationContext) ↓ 扫描 Bean ↓ 自动配置 ↓ 启动 Tomcat ↓ 监听 8080 ↓ 等待 HTTP 请求监听
Tomcat接收HTTP请求 ↓ DispatcherServlet ↓ Controller ↓ Service ↓ Repository ↓ 数据库
SpringBoot模块内文件结构
src
├── main
│
├── java
│ └── com.xxx.demo
│ ├── Application.java
│ ├── controller
│ ├── service
│ ├── mapper
│ ├── entity
│ ├── dto
│ ├── vo
│ ├── config
│ └── common
│
└── resources
├── application.yml
├── mapper
└── logback.xml
Application.java
启动入口,扫描项目,自动配置Mysql、Redis等,启动SpringBoot.
Controller
负责 HTTP 接口,接收请求,校验参数,返回结果。
Service
业务层,负责业务逻辑、事务控制、调用Repository。
Repository / Mapper
数据访问层,负责数据库操作,
Entity
数据库实体,对应数据表。
DTO
请求对象,接收前端参数。
VO
返回对象,发给前端。
Config
配置类
Common
公共部分
resources
SpringBoot多模块文件结构
backend
│
├── pom.xml
│
├── common
│
├── admin-server
│
├── knowledge-core
│
├── retrieval-core
│
├── workflow-core
│
├── agent-core
│
└── infra
admin-server是启动模块,负责对外提供接口和业务。
common是公共基础能力模块,不负责具体业务,不启动服务。
common
工具模板,包含统一返回类,全局异常,通用枚举,通用常量,工具类,通用模型等。
admin-server
SpringBoot启动模块,负责启动 SpringBoot,提供 HTTP API,接收前端请求,参数校验,权限校验,调用 core 模块,编排业务流程,返回 VO。
pom.xml文件结构
父pom负责版本、模块和插件配置。
模块pom负责自己需要什么依赖,是否能启动,如何打包。
modelVersion
Maven POM 模型版本,固定写法,基本不用改。
<modelVersion>4.0.0</modelVersion>parent
继承父工程,自动管理相关依赖和插件等。
父pom继承springboot官方工程。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.5.0</version> <relativePath/> </parent>子pom继承父工程。
<parent> <groupId>io.junhaohan</groupId> <artifactId>backend</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>groupId
项目组织名,标识项目归属。
一般只写在父pom中,子pom不写或者只写common。
<groupId>io.junhaohan</groupId>artifactId
当前父工程名称,标识这个maven工程。
<artifactId>backend</artifactId>version
项目版本号,用于模块依赖和发布jar包。
子工程中通常不写。
<version>0.0.1-SNAPSHOT</version>packaging(父工程pom专有)
pom表示该工程只是聚合工程,不生成普通jar,不启动springboot,不需要src目录,只管理子模块。
子模块默认为jar,表示该工程为普通java模块,一般不写。
<packaging>pom</packaging>name
项目名称对外展示,可不写。
<name>backend</name>description
说明项目用途,可不写。
<description>AI Knowledge Governance Platform Backend</description>license(父pom)
声明开源许可证。
<licenses> <license> <name>Apache License 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0</url> </license> </licenses>developers(父pom)
声明开发者信息。
<developers> <developer> <id>varus1088</id> <name>HH J</name> </developer> </developers>scm(父pom)
源码仓库信息。
<scm> <connection>scm:git:...</connection> <developerConnection>scm:git:...</developerConnection> <url>...</url> </scm>properties
定义变量,方便统一管理。
子模块一般不写,除非有特殊需求。
<properties> <java.version>21</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-ai.version>1.0.0</spring-ai.version> <mybatis-plus.version>3.5.12</mybatis-plus.version> </properties>modules
声明当前父工程管理哪些子模块,Maven 构建父工程时,会按模块依赖顺序构建;
子模块不需要。
<modules> <module>common</module> <module>infra</module> <module>knowledge-core</module> <module>retrieval-core</module> <module>workflow-core</module> <module>agent-core</module> <module>mcp-client</module> <module>admin-server</module> </modules>dependencyManagement(父模块)
管理依赖版本,不会真正引入依赖。
<dependencyManagement> <dependencies> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> </dependencies> </dependencyManagement>dependencies(子模块)
引入具体依赖,版本在父pom中管理即可。
<dependencies> <dependency> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>build(父工程)
管理插件。
<build> <pluginManagement> <plugins> ... </plugins> </pluginManagement> </build>pluginManagement
管理插件版本和默认配置,不一定执行。
子模块中一般不放。
plugins
启用插件。一般在子模块中按需使用。
<build> <plugins> ... </plugins> </build>resources
配置资源文件打包方式。
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>repositories
配置 Maven 下载依赖的远程仓库,一般不写在pom里,而是放在settings.xml中。
<repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories>profiles
Maven 构建环境区分,如测试环境和正式环境
<profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> </profile> </profiles>
maven
clean可选执行,其他部分默认从validate开始执行。
| clean | 清理旧的编译产物,避免旧代码、旧 class、旧 jar 影响新构建。 |
| validate | |
| compile | 编译 main 代码 |
| test | 编译 test 代码,执行单元测试 |
| package | 生成jar包 |
| verify | |
| install | 将jar包安装到本地 Maven 仓库(~/.m2/repository)以便其他模块引用 |
| site | |
| deploy |
注解
@RestController
@GetMapping
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。