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

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 {
    @Id
    private 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;
    }

    @GetMapping
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public 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 {

    @Autowired
    private HelloController helloController;

    @Test
    void 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.kler.cn/a/312470.html

相关文章:

  • 应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案
  • DICOM图像知识:DICOM图像排序与坐标系解析
  • 如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
  • YOLOv7-0.1部分代码阅读笔记-activations.py
  • 【设计模式系列】享元模式(十五)
  • 注意力机制的目的:理解语义;编码器嵌入高纬空间计算;注意力得分“得到S*V”;解码器掩码和交叉注意力层用于训练;最终的编码器和输出实现大模型
  • Django+React+Neo4j实现的地质领域知识图谱系统
  • CentOS7更新YUM源
  • 9.20哈好
  • 算法【双向广搜】
  • QT Layout布局,隐藏其中的某些部件后,不影响原来的布局
  • 【数据结构】5——哈夫曼树(Huffman Tree)
  • Linux网络——手撕TCP服务器,制定应用层协议,实现网络版计算器
  • websocketpp服务器搭建
  • 使用knn算法对iris数据集进行分类
  • 人力资源数据集分析(一)_t-test、卡方检验和描述性统计
  • Spring Cloud常见面试题
  • 电子电气架构---智能汽车应该是怎么样的架构?
  • 24.9.18学习笔记
  • opengl-redbook环境搭建(静态库)
  • 『功能项目』事件中心处理怪物死亡【55】
  • Vue3:props实现组件通信
  • react 创建react项目
  • 高级java每日一道面试题-2024年9月14日-基础篇-如何处理事务中的性能问题?
  • 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • Bio-Linux-shell详解-1-从0开始