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

Spring Boot 深度学习笔记:从入门到精通的全面指南

Spring Boot 是由 Pivotal 团队开发的基于 Spring 框架的一个项目。它的目标是简化新 Spring 应用的初始搭建和开发过程,通过提供一系列默认配置和快速启动的能力,使开发者能够快速上手,减少配置的复杂性。这篇学习笔记将详细介绍 Spring Boot 的基本概念、核心功能以及实际应用示例,帮助初学者全面了解并掌握 Spring Boot。

一、Spring Boot 简介

1.1 什么是 Spring Boot

Spring Boot 是 Spring 框架的一个子项目,目的是简化 Spring 应用的创建、配置和部署。它通过自动配置、生产准备的功能以及多种开箱即用的非功能性特性,如嵌入式服务器、度量监控和健康检查等,极大地简化了 Spring 应用的开发过程。

1.2 Spring Boot 的优势

  • 快速开发:Spring Boot 提供了许多开箱即用的功能,简化了配置和依赖管理,减少了开发时间。
  • 自动配置:通过自动配置,Spring Boot 能够智能地根据项目的依赖关系进行配置,减少了手动配置的麻烦。
  • 嵌入式服务器:支持嵌入式 Tomcat、Jetty 等服务器,简化了部署流程。
  • 生产准备功能:提供了内置的监控、健康检查和度量等功能,方便对应用的管理和维护。
  • 强大的社区和文档支持:Spring Boot 拥有丰富的文档和庞大的社区支持,开发者可以轻松找到解决方案。

二、Spring Boot 的基本概念

2.1 自动配置

Spring Boot 的核心之一是自动配置(Auto Configuration)。自动配置尝试猜测你需要的配置,并自动完成这些配置,从而减少开发者的配置工作。Spring Boot 通过 @EnableAutoConfiguration 注解启用自动配置。

2.2 Starter POMs

Starter POMs 是一组方便的依赖描述符,可以帮助你快速构建 Spring 应用。例如,spring-boot-starter-web 包含了开发 web 应用所需的常见依赖项,如 Spring MVC、Tomcat 等。

2.3 嵌入式服务器

Spring Boot 支持嵌入式服务器,使得应用可以以独立的方式运行,而不需要外部的应用服务器。这使得部署和测试变得更加简单和便捷。

2.4 Spring Boot CLI

Spring Boot CLI 是一个命令行工具,可以用来快速创建和运行 Spring 应用。它支持 Groovy 脚本,能够快速原型化应用。

三、Spring Boot 的核心功能

3.1 创建 Spring Boot 项目

创建 Spring Boot 项目有多种方式:

  • Spring Initializr:一个在线生成器,可以生成一个基本的 Spring Boot 项目结构。
  • IDE 插件:如 IntelliJ IDEA 和 Eclipse 都提供了创建 Spring Boot 项目的功能。
  • 手动创建:通过创建一个 Maven 或 Gradle 项目,并添加 Spring Boot 依赖。
3.1.1 使用 Spring Initializr

Spring Initializr 是一个 web 工具,可以生成一个带有基础配置的 Spring Boot 项目。你可以访问 Spring Initializr,选择需要的依赖项,生成并下载项目。

3.1.2 在 IDE 中创建项目

大多数现代的 IDE,如 IntelliJ IDEA 和 Eclipse,都提供了创建 Spring Boot 项目的模板。以下是使用 IntelliJ IDEA 创建 Spring Boot 项目的步骤:

  1. 打开 IntelliJ IDEA,选择 “Create New Project”。
  2. 选择 “Spring Initializr”。
  3. 配置项目的基本信息(如 Group、Artifact、名称等)。
  4. 选择需要的依赖项(如 Spring Web、Spring Data JPA 等)。
  5. 点击 “Finish”,IDE 会生成并导入项目。

3.2 配置文件

Spring Boot 使用 application.propertiesapplication.yml 文件来配置应用。配置文件位于 src/main/resources 目录下。

3.2.1 使用 application.properties

application.properties 是一个键值对格式的配置文件。以下是一些常见的配置示例:

# 服务器配置
server.port=8080# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret# 日志级别配置
logging.level.org.springframework=INFO
3.2.2 使用 application.yml

application.yml 是一个 YAML 格式的配置文件,具有更好的可读性。以下是相同配置的 YAML 示例:

server:port: 8080spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secretlogging:level:org.springframework: INFO

3.3 日志管理

Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。你可以通过配置文件来管理日志级别和格式。

3.3.1 配置日志级别

你可以在 application.propertiesapplication.yml 中配置日志级别。例如:

logging.level.org.springframework=INFO
logging.level.com.example.myapp=DEBUG
logging:level:org.springframework: INFOcom.example.myapp: DEBUG
3.3.2 自定义日志格式

你可以在 src/main/resources 目录下创建一个 logback-spring.xml 文件,自定义日志格式。例如:

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

3.4 Web 开发

Spring Boot 提供了强大的 web 开发支持,包括 Spring MVC 和 RESTful 服务的开发。

3.4.1 Spring MVC

Spring MVC 是一个强大的 web 框架,支持开发传统的基于服务器的 web 应用。以下是一个简单的控制器示例:

@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}
3.4.2 RESTful 服务

Spring Boot 使得创建 RESTful 服务变得非常简单。以下是一个简单的 RESTful 服务示例:

@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return new User(id, "John Doe");}@PostMapping("/users")public User createUser(@RequestBody User user) {// 逻辑省略return user;}
}

3.5 数据访问

Spring Boot 提供了对多种数据访问技术的支持,包括 JPA、JDBC 和 NoSQL 数据库。

3.5.1 Spring Data JPA

Spring Data JPA 简化了基于 JPA 的数据访问。以下是一个示例:

  1. 添加依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
  1. 配置数据源:

application.properties 中添加数据源配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
  1. 创建实体类和仓库接口:
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// getters and setters
}public interface UserRepository extends JpaRepository<User, Long> {
}
  1. 使用仓库接口:
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User getUser(Long id) {return userRepository.findById(id).orElse(null);}public User createUser(User user) {return userRepository.save(user);}
}

3.6 安全

Spring Boot 提供了对 Spring Security 的集成,简化了安全相关的配置和开发。

3.6.1 添加依赖

pom.xml 中添加 Spring Security 依赖:

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

.6.2 基本安全配置

Spring Boot 默认提供了基本的安全配置,如表单登录和基于 HTTP Basic 的认证。以下是一个自定义安全配置的示例:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}admin").roles("ADMIN");}
}

3.7 测试

Spring Boot 提供了丰富的测试支持,包括单元测试和集成测试。

3.7.1 单元测试

Spring Boot 提供了 @SpringBootTest 注解,用于集成测试。以下是一个示例:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testGetUser() {User user = userService.getUser(1L);assertNotNull(user);assertEquals("John Doe", user.getName());}
}
3.7.2 MockMvc

Spring Boot 提供了 MockMvc,用于模拟 HTTP 请求进行测试。以下是一个示例:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetUser() throws Exception {mockMvc.perform(get("/api/users/1")).andExpect(status().isOk()).andExpect(jsonPath("$.name").value("John Doe"));}
}

3.8 配置管理

Spring Boot 提供了灵活的配置管理机制,可以根据不同的环境进行配置。你可以使用 @ConfigurationProperties 注解来管理复杂的配置。

3.8.1 配置属性类

创建一个配置属性类,并使用 @ConfigurationProperties 注解:

@ConfigurationProperties(prefix = "app")
public class AppProperties {private String name;private String description;// getters and setters
}
3.8.2 加载配置

在主配置类中加载配置属性:

@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}

3.9 Actuator

Spring Boot Actuator 提供了对应用运行时状态的监控和管理功能。它包括多个端点,可以用来检查应用的健康状况、查看应用信息、管理日志级别等。

3.9.1 添加依赖

pom.xml 中添加 Actuator 依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.9.2 启用 Actuator 端点

application.properties 中启用所需的 Actuator 端点:

management.endpoints.web.exposure.include=health,info
3.9.3 访问 Actuator 端点

启动应用后,可以通过浏览器或其他工具访问 Actuator 端点。例如,访问 /actuator/health 端点可以查看应用的健康状况。

3.10 部署

Spring Boot 应用可以打包成独立的 JAR 文件,并可以直接运行,也可以部署到传统的应用服务器中。

3.10.1 打包成 JAR 文件

你可以使用 Maven 或 Gradle 将 Spring Boot 应用打包成 JAR 文件。以下是使用 Maven 的示例:

mvn clean package

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

java -jar target/myapp-0.0.1-SNAPSHOT.jar
3.10.2 部署到应用服务器

你也可以将 Spring Boot 应用打包成 WAR 文件,并部署到传统的应用服务器(如 Tomcat、Jetty)。以下是使用 Maven 打包成 WAR 文件的示例:

pom.xml 中添加插件配置:

<packaging>war</packaging><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

运行以下命令打包成 WAR 文件:

mvn clean package

生成的 WAR 文件位于 target 目录下,可以部署到应用服务器中。

四、Spring Boot 实践示例

4.1 创建一个简单的 Web 应用

在本节中,我们将创建一个简单的 Spring Boot Web 应用,包括用户注册和登录功能。

4.1.1 项目结构

首先,创建一个新的 Spring Boot 项目,添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
4.1.2 数据库配置

application.properties 文件中配置数据源:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
4.1.3 实体类和仓库接口

创建用户实体类和仓库接口:

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;// getters and setters
}public interface UserRepository extends JpaRepository<User, Long> {User findByUsername(String username);
}
4.1.4 服务层

创建用户服务类:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User register(User user) {// 注册逻辑return userRepository.save(user);}public User findByUsername(String username) {return userRepository.findByUsername(username);}
}
4.1.5 控制器

创建用户控制器:

@RestController
@RequestMapping("/api")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public User register(@RequestBody User user) {return userService.register(user);}@GetMapping("/user/{username}")public User getUser(@PathVariable String username) {return userService.findByUsername(username);}
}
4.1.6 安全配置

创建安全配置类:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate UserService userService;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userService).passwordEncoder(new BCryptPasswordEncoder());}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/register").permitAll().anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}
}
4.1.7 测试

测试注册和登录功能:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testRegister() throws Exception {mockMvc.perform(post("/api/register").contentType(MediaType.APPLICATION_JSON).content("{\"username\": \"user\", \"password\": \"password\"}")).andExpect(status().isOk());}@Testpublic void testLogin() throws Exception {mockMvc.perform(post("/login").param("username", "user").param("password", "password")).andExpect(status().isOk());}
}

五、总结

Spring Boot 是一个功能强大且易于使用的框架,极大地简化了 Spring 应

用的开发和配置过程。通过本篇学习笔记,我们详细介绍了 Spring Boot 的基本概念、核心功能以及实际应用示例。希望这些内容能帮助你快速上手并掌握 Spring Boot 的开发技巧。在实际项目中,Spring Boot 的灵活性和强大功能将助你高效地构建和维护应用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【报文数据流中的反压处理】
  • CleanMyMac2024最新免费电脑Mac系统优化工具
  • SQL Server中的CTE和临时表优化
  • C语言 | Leetcode C语言题解之第140题单词拆分II
  • CMakeLists如何多行注释
  • 计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习
  • RoLabelImg下载及旋转目标检测数据标注
  • Linux | buildrootfs 添加mkfs.ext3/mkfs.ext4 支持
  • 【算法小记】深度学习——时间序列数据分析 Time series Data Analysis
  • C#操作MySQL从入门到精通(17)——使用联结
  • Android AOSP定制去掉Google搜索栏
  • 单词记忆(第二周)
  • 如何提高工作效率?
  • Git【版本控制命令】
  • 【C51】DIY电子音乐贺卡:C51单片机项目设计与实现
  • [译]如何构建服务器端web组件,为何要构建?
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • download使用浅析
  • JAVA 学习IO流
  • js对象的深浅拷贝
  • mysql外键的使用
  • redis学习笔记(三):列表、集合、有序集合
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue 动态创建 component
  • WebSocket使用
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从零开始在ubuntu上搭建node开发环境
  • 盘点那些不知名却常用的 Git 操作
  • 前端技术周刊 2019-02-11 Serverless
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • kubernetes资源对象--ingress
  • puppet连载22:define用法
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #、%和$符号在OGNL表达式中经常出现
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $refs 、$nextTic、动态组件、name的使用
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (六)激光线扫描-三维重建
  • (算法)前K大的和
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (译)2019年前端性能优化清单 — 下篇
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net wcf memory gates checking failed
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 调用php,php 调用.net com组件 --
  • .NET 解决重复提交问题
  • .NET/C# 使用 SpanT 为字符串处理提升性能