当前位置: 首页 > news >正文

SpringBoot 入门实践

Spring Boot 入门教程:从零开始构建你的第一个应用

Spring Boot 是基于 Spring 框架的开发框架,它旨在简化 Spring 应用的开发流程。通过 Spring Boot,你可以迅速构建基于 Spring 的独立应用,无需进行复杂的 XML 配置。本文将带你从零开始构建一个简单的 Spring Boot 应用,并结合一些实践经验,帮助你更好地掌握 Spring Boot 的核心概念。


1. 什么是 Spring Boot?

Spring Boot 是一个基于 Spring 框架的快速开发平台,旨在简化 Spring 应用的配置和部署过程。通过 Spring Boot,你可以:

  • 快速启动 Spring 应用程序。
  • 内嵌 Tomcat、Jetty 或 Undertow,无需单独安装容器。
  • 通过自动配置,大大减少 XML 和注解配置。

2. 创建 Spring Boot 项目

创建 Spring Boot 项目可以通过以下几种方式:

  • Spring Initializr:Spring 官方提供的项目生成工具,支持生成基于 Maven 或 Gradle 的项目。
  • IDE:如 IntelliJ IDEA、Eclipse 等 IDE 也提供了直接创建 Spring Boot 项目的功能。
  • 命令行工具:使用 Spring Boot CLI(Command Line Interface)创建项目。

使用 Spring Initializr 创建项目

  1. 打开 Spring Initializr。
  2. 选择项目类型(Maven/Gradle)、语言(Java)、Spring Boot 版本。
  3. 填写项目名称、包名等元信息。
  4. 在依赖管理中,选择你需要的依赖,例如 Spring Web 用于构建 Web 应用。
  5. 点击 Generate,下载并解压项目。

在项目根目录下,执行以下命令来运行项目:

./mvnw spring-boot:run

3. Spring Boot 项目结构

Spring Boot 项目的基本结构如下:

src├── main│   ├── java│   │   └── com.example.demo│   │       └── DemoApplication.java│   └── resources│       └── application.properties
  • DemoApplication.java:项目的入口类,包含 main 方法。
  • application.properties:配置文件,用于配置数据库连接、日志等。

示例:一个典型的入口类 DemoApplication.java

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

4. Spring Boot 核心概念

4.1 自动配置(Auto Configuration)

Spring Boot 的核心特性之一是 自动配置,它能够根据类路径中的依赖自动配置 Spring 应用,而不需要手动配置 Bean。例如,如果在类路径中有 spring-boot-starter-web,Spring Boot 会自动配置 Tomcat 作为默认的嵌入式服务器,并且将其配置为处理 HTTP 请求。

经验提示

  • 在大多数情况下,自动配置已经足够。只有在特殊需求下才需要显式配置。
4.2 Spring Boot Starters

Starters 是一组预定义的依赖集,旨在减少开发者手动管理依赖的负担。例如:

  • spring-boot-starter-web:用于构建 RESTful Web 服务。
  • spring-boot-starter-data-jpa:用于构建数据库应用并与 JPA 交互。

经验提示

  • 使用 Starters 可以迅速启动项目,但要定期检查依赖版本,避免潜在的兼容性问题。
4.3 application.properties 配置文件

application.propertiesapplication.yml 是 Spring Boot 的默认配置文件,常用来配置应用属性。常见的配置项包括:

  • 端口配置:
    server.port=8081
    
  • 数据库配置:
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=password
    

经验提示

  • 对于敏感配置(如数据库密码),应考虑使用 Spring Boot 的 配置加密 功能或外部化配置。

5. 构建第一个 REST API

Spring Boot 最常用的一个场景就是构建 Web API。让我们使用 Spring Boot 来创建一个简单的 RESTful API,返回一个 JSON 响应。

创建控制器

package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}

运行项目,然后在浏览器中访问 http://localhost:8080/hello,你将看到 “Hello, Spring Boot!” 的响应。

5.1 RestController 和 RequestMapping 注解
  • @RestController:告诉 Spring 这个类是一个控制器,并且返回的是数据而不是视图。
  • @GetMapping:映射 HTTP GET 请求到指定的处理方法。

经验提示

  • 在构建 REST API 时,充分利用 Spring Boot 的 异常处理数据验证,提升代码的健壮性。

6. 集成数据库

Spring Boot 支持多种数据库集成方式,最常见的是通过 Spring Data JPA 实现数据持久化。

6.1 配置数据库

application.properties 中配置 MySQL 数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
6.2 创建实体类和存储库

实体类

package com.example.demo.model;import javax.persistence.Entity;
import javax.persistence.Id;@Entity
public class User {@Idprivate Long id;private String name;// Getters and Setters
}

存储库

package com.example.demo.repository;import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<User, Long> {
}

控制器

package com.example.demo.controller;import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {private final UserRepository userRepository;public UserController(UserRepository userRepository) {this.userRepository = userRepository;}@GetMappingpublic List<User> getUsers() {return userRepository.findAll();}@PostMappingpublic User createUser(@RequestBody User user) {return userRepository.save(user);}
}

经验提示

  • 使用 Spring Data JPA 可以极大简化数据库操作。对于复杂查询,可以定义自定义查询方法或使用 JPQL

7. Spring Boot 的测试支持

Spring Boot 提供了开箱即用的测试支持。你可以通过 @SpringBootTest 进行集成测试。

示例:对 HelloController 进行单元测试:

package com.example.demo;import com.example.demo.controller.HelloController;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;@SpringBootTest
class DemoApplicationTests {@Autowiredprivate HelloController helloController;@Testvoid contextLoads() {assertThat(helloController).isNotNull();}
}

8. 经验与最佳实践

  • 分层架构:将应用分为控制器、服务层和数据访问层。控制器仅处理 HTTP 请求,而业务逻辑应放在服务层中。
  • 配置管理:尽量将环境配置外部化,使用 application.properties 或者环境变量管理不同环境的配置。
  • 日志管理:Spring Boot 提供默认的 Logback 日志系统。通过 application.propertiesapplication.yml 配置日志级别、输出位置等。
logging.level.org.springframework=INFO
logging.file.name=spring-boot-app.log
  • 容器化:Spring Boot 应用容易与 Docker 集成。使用 Dockerfile 构建容器化的 Spring Boot 应用,并使用 docker-compose 进行管理。

Spring Boot 简化了 Spring 框架的复杂配置,使得开发者能够快速构建和部署应用。通过 Spring Boot,开发者可以专注于业务逻辑,而无需过多担心基础设施问题。本文介绍了从项目创建、REST API 构建、数据库集成到测试的全流程,希望能帮助你快速掌握 Spring Boot 的基础用法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ConvexHull-凸包-原理-代码实现
  • 【pandas操作:如何写XLSX文档】
  • 游戏陪玩系统源码搭建教程,如何配置陪玩系统的第三方云储存
  • React + React Image支持图像的各种转换,如圆形、模糊等效果吗?
  • 【网络】TCP/IP 五层网络模型:网络层
  • python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
  • 101. 对称二叉树【同时遍历两棵树】【C++】
  • 数据库———事务及bug的解决
  • python怎么打开编辑器
  • 古诗词四首鉴赏
  • git配置SSH
  • 电脑ip会因为换了网络改变吗
  • Spring Boot-依赖冲突问题
  • monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)
  • 缺陷及缺陷管理(复习)
  • 5、React组件事件详解
  • Apache的基本使用
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • 检测对象或数组
  • 今年的LC3大会没了?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端面试总结(at, md)
  • 入门到放弃node系列之Hello Word篇
  • 使用 Docker 部署 Spring Boot项目
  • 使用parted解决大于2T的磁盘分区
  • 我与Jetbrains的这些年
  • 限制Java线程池运行线程以及等待线程数量的策略
  •  一套莫尔斯电报听写、翻译系统
  • 应用生命周期终极 DevOps 工具包
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (LLM) 很笨
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (初研) Sentence-embedding fine-tune notebook
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)UDP基本编程步骤
  • (转)mysql使用Navicat 导出和导入数据库
  • .net core Swagger 过滤部分Api
  • .Net 高效开发之不可错过的实用工具
  • .NET 给NuGet包添加Readme
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • @Autowired @Resource @Qualifier的区别
  • @在php中起什么作用?
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • [C#]实现GRPC通讯的服务端和客户端实例
  • [C++]使用yolov10的onnx模型结合onnxruntime和bytetrack实现目标追踪