SpringBoot 入门实践

embedded/2024/9/24 22:03:37/

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

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 响应。

创建控制器

java">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 创建实体类和存储库

实体类

java">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
}

存储库

java">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> {
}

控制器

java">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 进行单元测试:

java">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 的基础用法。


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

相关文章

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.3-2.4

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第二周 深度卷积网络&#xff1a;实例探究&#xff08;Deep convolutional models: case studies&#xff09;2.3 残差网络(ResNets)(Residual Networks (ResNets))2.4 残差网络为什么有用&am…

Ubuntu 录制 gif 动画软件 Peek

安装命令 sudo add-apt-repository ppa:peek-developers/stable sudo apt update sudo apt install peek -y快捷键 CtrlAltR 进行 Gif的录制的开始与停止

ai论文生成可靠吗吗?分享4款ai论文生成软件

AI论文生成工具近年来在学术界和学生群体中越来越受欢迎&#xff0c;其主要优势在于能够提高写作效率、快速生成初稿&#xff0c;并提供多种功能以优化内容。然而&#xff0c;关于这些工具的可靠性问题&#xff0c;仍需从多个角度进行探讨。 AI论文生成的可靠性 AI论文生成的可…

js 实现换肤

js换肤 可以通过js来实现网页换肤效果的两种方案&#xff0c;很简单。 展示~ 简单换肤: 普通的CSS样式更换即可实现 方案1&#xff1a;js动态的link对应的皮肤样式 过编译工具与构建工具编译出多套皮肤css&#xff0c;通过js动态的link对应的皮肤样式 // js动态处理 var t…

衍射的角谱理论

一、单色平面波与本征函数 不考虑夫琅禾费近似, 则相干光场在给定二平面间的传播过程就是通过一个二维线性空不变系统。 上式函数是这个系统的本征函数,表示振幅为1的平面波在xy平面上的复振幅分布,空间频率分量 = cos / , = cos / 与平面波的传播方向相联系, 空间…

【深度学习】(3)--损失函数

文章目录 损失函数一、L1Loss损失函数1. 定义2. 优缺点3. 应用 二、NLLLoss损失函数1. 定义与原理2. 优点与注意3. 应用 三、MSELoss损失函数1. 定义与原理2. 优点与注意3. 应用 四、BCELoss损失函数1. 定义与原理2. 优点与注意3. 应用 五、CrossEntropyLoss损失函数1. 定义与原…

sftp上传文件报错提示“Permission denied“

目录 问题 解决 问题 使用 FileZilla 工具向服务器上传文件时发生报错&#xff0c;提示权限被拒&#xff0c;具体报错信息如下&#xff1a;open for write: received failure with description sftp: "Permission denied" (SSH_FX_PERMISSION_DENIED) 解决 首先我…

MySQL中去除重复

除去相同的行 SELECT DISTINCT 列名 FROM 表名; 示例&#xff1a;查询employees表&#xff0c;显示唯一的部门ID select distinct department_id from employees;