Spring Boot 应用开发:从入门到实战

Spring Boot 是一种基于 Spring 框架的开源项目,旨在简化基于 Spring 的开发过程。它通过自动化配置、内嵌服务器以及高效的开发工具,使得开发人员可以更加轻松地构建企业级应用程序。本篇文章将深入探讨 Spring Boot 的核心概念、开发过程以及实际的代码实现,帮助读者掌握 Spring Boot 开发的技巧与最佳实践。

1. Spring Boot 的概述

1.1 什么是 Spring Boot?

Spring Boot 是由 Pivotal 团队开发的一个基于 Spring 的框架,它用于简化 Spring 应用程序的创建和部署。它通过自动化配置和对常见开发任务的简化,使得开发者可以更快地构建出生产级别的应用。

1.2 Spring Boot 的优势

  • 快速入门:通过自动配置和“开箱即用”的理念,减少了配置的复杂性。
  • 内嵌服务器:内置 Tomcat、Jetty 等服务器,开发者可以直接运行应用程序,无需额外的配置。
  • 生产级监控:集成 Actuator,提供丰富的监控和管理端点。
  • 强大的生态系统:可以无缝集成 Spring 全家桶及第三方库,满足各种企业应用场景需求。

2. 环境搭建与项目创建

2.1 环境准备

要开始 Spring Boot 开发,首先需要准备以下工具:

  • Java JDK 8 及以上:Spring Boot 需要 JDK 8 或更高版本。
  • Maven 或 Gradle:用于管理项目的依赖和构建。
  • IDE:推荐使用 IntelliJ IDEA 或 Eclipse,这些 IDE 都有很好的 Spring Boot 支持。

2.2 使用 Spring Initializr 创建项目

Spring Initializr 是一个便捷的工具,用于生成 Spring Boot 项目骨架。可以通过 Spring Initializr 官网 创建,也可以在 IntelliJ IDEA 中使用插件来创建项目。

生成项目时,选择如下配置:

  • Project: Maven
  • Language: Java
  • Spring Boot Version: 最新的稳定版
  • Dependencies: Spring Web, Spring Data JPA, H2 Database

生成项目后,将其导入到您的 IDE 中,您会看到一个标准的 Spring Boot 项目结构。

3. Spring Boot 的核心概念

3.1 自动配置与注解

Spring Boot 提供了大量的自动化配置,使得开发人员只需要编写少量的配置代码。以下是几个常用的注解:

  • @SpringBootApplication:这是一个组合注解,等价于 @Configuration, @EnableAutoConfiguration, @ComponentScan。它标识一个类是 Spring Boot 应用的入口。
  • @RestController:结合了 @Controller@ResponseBody,用于开发 RESTful 风格的 API。
  • @RequestMapping:用于定义请求路径,可以应用于类或方法上。

3.2 代码实现:Hello World

我们先从一个简单的“Hello World”示例开始,来熟悉 Spring Boot 的基本用法。

在生成的 Spring Boot 项目中,我们可以创建一个简单的 REST API,如下所示:

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

HelloController 类中,@RestController 注解表明这是一个 REST 控制器,@RequestMapping@GetMapping 用于映射请求路径。当访问 http://localhost:8080/api/hello 时,将返回“Hello, Spring Boot!”的字符串。

4. 数据库集成与操作

4.1 使用 Spring Data JPA 进行数据库操作

Spring Data JPA 是 Spring Boot 的数据访问解决方案,它使得我们可以通过简单的接口来完成对数据库的操作。

4.1.1 配置数据库连接

src/main/resources/application.properties 文件中,添加如下配置来连接内存数据库 H2:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true

这段配置将启动一个内存数据库 H2,并开启 H2 控制台,您可以通过 http://localhost:8080/h2-console 访问数据库控制台。

4.1.2 实体类与 JPA 仓库

首先,创建一个简单的实体类 User,用来表示数据库中的用户信息:

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

然后,创建一个 JPA 仓库接口,用于管理 User 实体:

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
4.1.3 创建 REST API 来操作用户数据

接下来,创建一个 UserController,通过 REST API 来管理用户数据:

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

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

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User userDetails) {
        User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
        user.setName(userDetails.getName());
        user.setEmail(userDetails.getEmail());
        return userRepository.save(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}
  • @GetMapping 获取所有用户。
  • @PostMapping 创建一个新用户。
  • @GetMapping("/{id}") 获取指定 ID 的用户。
  • @PutMapping("/{id}") 更新用户信息。
  • @DeleteMapping("/{id}") 删除用户。

通过这些简单的 API,我们可以对用户数据进行基本的 CRUD 操作。

5. Spring Boot 安全性

5.1 使用 Spring Security 保护应用

Spring Security 是一个强大的安全框架,可以用于保护 Spring Boot 应用。我们可以使用它来添加身份验证和授权功能。

首先,在 pom.xml 中添加 Spring Security 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

然后,创建一个简单的配置类来设置安全规则:

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/api/users/**").authenticated()
                .anyRequest().permitAll()
                .and()
            .httpBasic();
        return http.build();
    }
}

在这个配置中,所有 /api/users/** 路径的请求都需要身份验证,而其他路径可以匿名访问。

6. Spring Boot 测试

Spring Boot 提供了一套完整的测试工具,使得测试变得简单高效。我们可以使用 @SpringBootTest 注解来编写集成测试。

package com.example.demo;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class UserRepositoryTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void testCreateUser() {
        User user = new User();
        user.setName("Test User");
        user.setEmail("test@example.com");
        User savedUser = userRepository.save(user);

        assertThat(savedUser.getId()).isNotNull();
        assertThat(savedUser.getName()).isEqualTo("Test User");
    }
}

在这个测试中,我们创建了一个用户,并验证了它是否被成功保存。

7. Spring Boot 的部署

7.1 打包为 JAR 文件

Spring Boot 应用通常打包为一个独立的 JAR 文件,其中包含所有依赖和内嵌的服务器。使用 Maven,可以通过以下命令打包应用:

mvn clean package

生成的 JAR 文件位于 target 目录下,可以通过以下命令运行:

java -jar target/demo-0.0.1-SNAPSHOT.jar

7.2 部署到云平台

Spring Boot 应用可以非常方便地部署到各种云平台,例如 AWS、Azure 或 Google Cloud。通常可以将 JAR 文件上传到服务器并运行,或者使用 Docker 构建容器镜像并进行部署。

8. 总结

通过本文的详细讲解,我们了解了 Spring Boot 的基础知识、如何创建 REST API、如何集成数据库、如何使用 Spring Security 来保护应用以及如何进行测试和部署。Spring Boot 的简洁性和强大功能使得它成为构建现代企业应用的绝佳选择。

Spring Boot 的生态系统还包括诸如 Spring Cloud、Spring Batch 等其他模块,可以用来构建复杂的分布式系统和批处理任务。希望本文能够帮助您掌握 Spring Boot 的基本开发流程,为后续深入学习和实践打下基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.cpp基本数据类型

cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型&#xff1a;存储真值 true 或假值 false&#xff0c;C语言编译器C99以上支持。 C语言的bool类型&#xff1a;要添加 #include <stdbool.h>头文件 #includ…

考研读研生存指南,注意事项

本视频&#xff0c;涉及考研读研的方方面面&#xff0c;从考研初试→复试面试→研究生生活→导师相处→论文专利写作混毕业&#xff0c;应有尽有。有了他&#xff0c;你的研究生生涯稳了。 读研考研注意事项&#xff0c;研究生生存指南。_哔哩哔哩_bilibili 一、考研初试注意事…

“声音”音源设置和音效播放

学习如何使用音效系统&#xff0c;背景音乐和其他特别的音效&#xff0c;跳跃攻击等等 学习如何在unity当中使用整套的音效系统&#xff0c;使用之前&#xff0c;我们先来确定一下我们要使用的音乐和音效&#xff0c;在Unity Asset Store当中搜索&#xff0c;添加到我们的unit…

ICP许可证网站模板审核专用下载

ICP许可证网站模板审核专用下载 在当今的数字化时代&#xff0c;互联网的合规性变得尤为重要&#xff0c;特别是在中国。ICP许可证&#xff0c;即互联网信息服务业务经营许可证&#xff0c;是经营性网站必须持有的合法证件。为了帮助网站快速达到合规要求&#xff0c;选择合适…

出海IAA产品如何提升广告展示率?

大家好&#xff0c;我是牢鹅&#xff01;对于出海有做IAA的开发者来说&#xff0c;收益的增长至关重要。而广告收益&#xff0c;又与广告展示率息息相关。 牢鹅根据自身经验和AdMob的一些公开资料&#xff0c;总结了下面几点和提升广告展示率的方法&#xff0c;大家可以对照进…

在不支持AVX的linux上使用PaddleOCR

背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…

数字图像处理的概念(二)

一 图像处理的概念 1 图像处理的内容 它是研究图像的获取、传输、存储、变换、显示、理解与综合利用的一门崭新学科。根据抽象程度不同可分为三个层次&#xff1a;狭义图像处理、图像分析和图像理解。如图 1.2.1 所示。 具体而言&#xff0c;数字图像处理的内容包括 图像的数…

【OceanBase探会】云与 AI 赋能一体化数据库的创新之旅

前言 哈喽&#xff0c;大家好&#xff0c;我是不叫猫先生&#xff0c;非常荣幸受邀参加2024年10月23日的「OceanBase2024年度发布会」&#xff0c;感受这场数据库技术的盛宴。 在云和 AI 时代&#xff0c;构建一体化数据库已成为现代数据架构的核心。随着数据量的激增和应用场…

Linux系统块存储子系统分析记录

1 Linux存储栈 通过网址Linux Storage Stack Diagram - Thomas-Krenn-Wiki-en&#xff0c;可以获取多个linux内核版本下的存储栈概略图&#xff0c;下面是kernel-4.0的存储栈概略图&#xff1a; 2 存储接口、传输速度 和 协议 2.1 硬盘 《深入浅出SSD&#xff1a;固态存储核心…

信息安全工程师(69)数字水印技术与应用

前言 数字水印技术是一种在数字媒体中嵌入特定信息的技术&#xff0c;这些信息可以是版权信息、元数据等。 一、数字水印技术的定义与原理 数字水印技术&#xff08;Digital Watermarking&#xff09;是将一些标识信息&#xff08;即数字水印&#xff09;直接嵌入数字载体&…

ASP.NET Core开发Chatbot API

本文介绍基于ASP.NET Core的Chatbot Restful API开发&#xff0c;通过调用大语言模型的SDK&#xff0c;完成一个简单的示例。并且通过容器化进行部署. 安装 首先需要安装.NET环境&#xff0c;笔者在Ubuntu 22.04通过二进制包进行安装&#xff0c;Windows和Mac下都有installer…

DDR Study - LPDDR Write and Training

参考来源&#xff1a;JESD209-4B&#xff0c;JESD209-4E LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR Read and Training → LPDDR Write and Training → LPDDR Clock Switch → PIM Technical Write Command 基于JEDEC标准中可以看到Write Timing信息…

LC专题:图

文章目录 133. 克隆图 133. 克隆图 题目链接&#xff1a;https://leetcode.cn/problems/clone-graph/?envTypestudy-plan-v2&envId2024-spring-sprint-100 又一次写到这个题目&#xff0c;思路仍然不清晰&#xff0c;给我的感觉是使用递归解题&#xff0c;但是递归具体…

基于springboot企业微信SCRM管理系统源码带本地搭建教程

系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 基…

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名&#xff0c;那么当使用进行 IP 请求时&#xff0c;则将会命中第一个配置的站点 以上图为例&#xff0c;如果用户使用 IP 访问&#xff0c;命中 example.com。 如果域名处填写的分别为域名与泛域名&#xff0c;除非准确命中域名&#xff0c;否…

顶点着色网格转换为 UV 映射的纹理化网格

https://dylanebert-instanttexture.hf.space/ 简介 顶点着色是一种将颜色信息直接应用于网格顶点的简便方法。这种方式常用于生成式 3D 模型的构建&#xff0c;例如InstantMesh。然而&#xff0c;大多数应用程序更偏好使用 UV 映射的纹理化网格。 InstantMeshhttps://hf.co/sp…

3D-IC——超越平面 SoC 芯片的前沿技术

“3D-IC”&#xff0c;顾名思义是“立体搭建的集成电路”&#xff0c;相比于传统平面SoC&#xff0c;3D-IC引入垂直堆叠芯片裸片&#xff08;die&#xff09;和使用硅通孔&#xff08;TSV&#xff09;等先进封装技术&#xff0c;再提高性能、降低功耗和增加集成度方面展现了巨大…

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

springboot080房屋租赁管理系统的设计与实现(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;房屋租赁管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好…

Java 输入与输出(I\O)之对象流与对象序列化

什么是Java的对象流&#xff1f; Java对象流是用于存储和读取基本数据类型数据或对象数据的输入输出流。 Java的对象流可分为两种&#xff1a; 1&#xff0c;对象输入流类ObjectInputStream 用于从数据源读取对象数据&#xff0c;它是可以读取基本数据类型数据或对象数据的输…