Java程序开发之Spring Boot快速入门:5分钟搭建RESTful API

embedded/2025/3/13 19:39:31/

一、Spring Boot核心优势速览

1. 传统Spring vs Spring Boot对比

特性SpringSpring Boot
配置方式XML/Java Config自动配置
内嵌服务器需手动部署Tomcat/Jetty内置
依赖管理手动指定Starter POMs
监控需集成第三方Actuator内置
启动速度较慢秒级启动

二、5分钟极速开发实战

1. 创建项目(使用Spring Initializr)

  1. 访问 start.spring.io
  2. 选择配置:
    • Project: Maven
    • Language: Java
    • Spring Boot: 3.0.5
    • Dependencies: Spring Web, DevTools
  3. 点击Generate下载项目

2. 编写第一个REST控制器

java">@RestController  
@RequestMapping("/api")  
public class HelloController {  @GetMapping("/hello")  public String sayHello(@RequestParam(required = false) String name) {  return "Hello, " + (name != null ? name : "Spring Boot");  }  @PostMapping("/users")  public User createUser(@RequestBody User user) {  return userService.save(user);  }  
}  // 实体类  
public record User(Long id, String name, String email) {}  

3. 运行与测试

mvn spring-boot:run  
# 访问 http://localhost:8080/api/hello?name=CSDN  

三、自动配置与进阶功能

1. 自动装配原理图解

启动类@SpringBootApplication
@EnableAutoConfiguration
扫描META-INF/spring.factories
加载自动配置类
条件装配Bean

2. 常用Starter依赖说明

Starter功能包含技术
spring-boot-starter-webWeb开发Tomcat, Spring MVC
spring-boot-starter-data-jpa数据库操作Hibernate, HikariCP
spring-boot-starter-security安全认证Spring Security
spring-boot-starter-test单元测试JUnit, Mockito

四、数据库集成与REST API增强

1. 添加JPA与H2数据库

<!-- pom.xml -->  
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-jpa</artifactId>  
</dependency>  
<dependency>  <groupId>com.h2database</groupId>  <artifactId>h2</artifactId>  <scope>runtime</scope>  
</dependency>  

2. 定义实体与Repository

java">@Entity  
public class User {  @Id  @GeneratedValue  private Long id;  private String name;  private String email;  // getters/setters  
}  public interface UserRepository extends JpaRepository<User, Long> {}  

3. 编写CRUD API

java">@RestController  
@RequestMapping("/api/users")  
public class UserController {  private final UserRepository repository;  @GetMapping  public List<User> getAllUsers() {  return repository.findAll();  }  @GetMapping("/{id}")  public User getUserById(@PathVariable Long id) {  return repository.findById(id)  .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));  }  
}  

五、API文档生成(Swagger集成)

1. 添加OpenAPI依赖

<dependency>  <groupId>org.springdoc</groupId>  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>  <version>2.1.0</version>  
</dependency>  

2. 访问文档界面

启动后访问:

  • API文档:http://localhost:8080/swagger-ui.html
  • OpenAPI定义:http://localhost:8080/v3/api-docs

六、生产级部署与监控

1. 打包与运行

mvn clean package  
java -jar target/demo-0.0.1-SNAPSHOT.jar  

2. 健康检查与监控

# 查看健康状态  
curl http://localhost:8080/actuator/health  # 查看环境配置  
curl http://localhost:8080/actuator/env  

3. Docker化部署

FROM eclipse-temurin:17-jdk-alpine  
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar  
ENTRYPOINT ["java","-jar","/app.jar"]  

七、常见问题与解决方案

1. 启动失败:端口冲突

# application.properties  
server.port=8081  

2. 依赖冲突

mvn dependency:tree > deps.txt  # 分析依赖树  

3. 热部署失效

# 开启自动重启  
spring.devtools.restart.enabled=true  


http://www.ppmy.cn/embedded/172332.html

相关文章

Android电量与流量优化

Android电量与流量优化 一、电量优化基础 1.1 电量消耗原理 Android设备的电量消耗主要来源于以下几个方面: 屏幕显示:屏幕是耗电量最大的硬件之一,尤其是高亮度和高刷新率的屏幕。CPU处理:CPU执行计算任务时会消耗大量电量,尤其是高负载运算。网络通信:移动数据、Wi-…

大语言模型(LLM)的微调与应用

一、微调与应用的核心区别 目标差异 微调&#xff08;Fine-tuning&#xff09;&#xff1a;针对预训练模型进行参数调整&#xff0c;使其适应特定任务或领域&#xff08;如医疗问答、法律文本分析&#xff09;。需通过有监督微调&#xff08;SFT&#xff09;或低秩适配&#xf…

Python----计算机视觉处理(Opencv:自适应二值化,取均值,加权求和(高斯定理))

一、自适应二值化 与二值化算法相比&#xff0c;自适应二值化更加适合用在明暗分布不均的图片&#xff0c;因为图片的明暗不均&#xff0c;导致图片 上的每一小部分都要使用不同的阈值进行二值化处理&#xff0c;这时候传统的二值化算法就无法满足我们的需求 了&#xff0c;于是…

微信小程序审核失败,你的小程序涉及提供播放、观看等服务,请补充选择:文娱-其他视频类目 解决

之前审核的都没有什么问题&#xff0c;结果这次就不给过还提示我们这个。 我们的视频是操作演示的视频。仅用于介绍使用。 是否接受修改指引&#xff0c;勾选我不理解以上内容 再勾选 下面不理解内容异项 申诉理由 视频播放和观看只限于当前用户自己使用&#xff0c;而视…

Unity Lerp和InverseLerp函数用处

我认为最大的用处就是缓冲刚体移动&#xff01;&#xff01;&#xff01;它的作用是每次调用都返回一个 a &#xff08;b - a&#xff09; * t的值&#xff0c;所以只要给一个变化的t值&#xff0c;就可以得到一个适中移动速度的刚体&#xff0c;类似下面这种用法&#xff0c;…

全方位 JVM 调优参数详解

全方位 JVM 调优参数详解 JVM 的调优对于 Java 应用的性能至关重要。以下为你详细列举各类 JVM 调优参数&#xff0c;希望能满足你对“所有”参数的需求。 一、内存管理参数 堆内存参数 • 堆初始大小与最大值 ◦ -Xms&#xff1a;设置 JVM 启动时堆内存的初始大小。如 -Xm…

redis增加ip白名单

Redis增加IP白名单 随着互联网的快速发展&#xff0c;网络安全问题也日益凸显。为了保护服务器安全&#xff0c;我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库&#xff0c;可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…

Python函数的递归调用

基本介绍 1、简单的说: 递归就是函数自己调用自己,每次调用时传入不同的值 2、递归有助于编程者解决复杂问题&#xff0c;同时可以让代码变得简洁 递归能解决什么问题&#xff1f; 1、各种数学问题如&#xff1a;皇后问题、汉诺塔、阶乘问题、迷宫问题等等 2、各种算法中也…