Spring Boot项目实战教程:快速构建Web应用与RESTful API
目录
- 一、Spring Boot简介
- 1、Spring Boot的定义
- 2、Spring Boot的优势
- (1)快速开发
- (2)自动配置
- (3)微服务支持
- (4)无代码生成和XML配置
- (5)独立运行
- (6)丰富的社区和文档支持
- (7)易于监控和管理
- (8)灵活的配置选项
- (9)易于集成
- (10)支持多种开发环境
- 3、Spring Boot的发展历程
- (1)Spring Boot的起源
- (2)Spring Boot 1.x版本的发展
- (3)Spring Boot 2.x版本的革新
- (4)Spring Boot的现代化发展
- (5)Spring Boot的未来展望
- 二、Spring Boot环境搭建
- 1、Java环境配置
- (1)Java环境配置详细步骤
- 2、Maven环境配置
- (1)Maven简介
- (2)Maven环境配置详细步骤
- 3、Spring Boot项目结构解析
- (1)项目基本组成
- (2)Java源代码结构
- (3)资源文件
- (4)测试代码
- (5)构建配置文件
- (6)项目构建和运行
- (7)总结
- 三、Spring Boot核心功能
- 1、自动配置原理
- (1)自动配置的工作流程
- (2)自动配置的定制
- (3)自动配置的挑战
- (4)总结
- 2、Starter依赖的使用
- (1)Starter依赖的定义
- (2)Starter依赖的工作原理
- (3)常用的Starter依赖
- (4)使用Starter依赖的步骤
- (5)Starter依赖的定制
- (6)总结
- 3、管理和监控应用
- (1)管理和监控的重要性
- (2)Spring Boot Actuator
- (3)Actuator的端点
- (4)启用Actuator
- (5)使用Actuator
- (6)自定义Actuator端点
- (7)监控和管理工具
- (8)应用性能监控
- (9)日志管理
- (10)总结
- 四、Spring Boot实战案例
- 1、创建一个简单的Web应用
- (1)创建项目
- (2)项目结构解析
- (3)创建Controller
- (4)运行应用
- (5)配置应用
- (6)测试应用
- (7)总结
- 2、整合数据库操作
- (1)选择数据库和依赖
- (2)配置数据库连接
- (3)创建实体类
- (4)创建数据访问层
- (5)使用数据访问层
- (6)测试数据库操作
- 3、构建RESTful API
- (1)RESTful API的基本概念
- (2)创建RESTful API的基础步骤
- (3)实战:构建用户管理API
- 定义实体类
- 创建控制器类
- 定义服务层
- 异常处理
- (4)测试RESTful API
一、Spring Boot简介
1、Spring Boot的定义
在当今快速发展的软件开发领域,微服务架构和快速开发框架成为了主流趋势。Spring Boot,作为Spring框架的一个重要模块,应运而生,它致力于简化Spring应用的初始搭建以及开发过程,让开发者能够更专注于业务逻辑的实现,而非繁琐的配置工作。
Spring Boot是一个开源的Java框架,它基于Spring框架,提供了一种全新的开发方式,旨在让Spring应用的创建和部署变得尽可能简单。它通过“约定大于配置”的原则,减少了开发者的配置负担,使得开发者可以快速启动并运行一个应用程序。
以下是Spring Boot定义的几个关键点:
-
快速开发:Spring Boot提供了大量的Starter依赖,这些依赖能够自动配置Spring应用中的许多组件,从而大大减少了开发者的配置工作,加快了开发速度。
-
自动配置:Spring Boot能够根据项目中添加的依赖自动配置Spring框架的各个组件。例如,当添加了Spring Boot的Starter依赖后,Spring Boot会自动配置数据库连接、模板引擎等。
-
独立运行:Spring Boot应用可以独立运行,无需部署到外部的应用服务器。它内置了Tomcat、Jetty或Undertow等服务器,使得开发者可以直接运行jar文件。
-
无代码生成和XML配置:Spring Boot使用注解和默认配置来替代传统的XML配置,从而简化了配置过程,降低了学习曲线。
-
微服务支持:Spring Boot非常适合构建微服务架构的应用程序。它提供了许多用于构建微服务的工具和组件,如Eureka、Hystrix等。
Spring Boot的核心思想是“约定大于配置”,这意味着Spring Boot会为开发者提供一套合理的默认配置,开发者只需要在必要时进行个性化配置。这种设计理念极大地降低了Spring应用的复杂度,使得开发者能够更加专注于业务逻辑的实现。
Spring Boot不仅仅是一个框架,它更是一种全新的开发模式,它改变了传统的Spring开发方式,让Java应用的创建和部署变得更加简单、快捷。通过Spring Boot,开发者可以轻松地创建出高效、可扩展且易于维护的应用程序。
2、Spring Boot的优势
Spring Boot自2014年推出以来,迅速成为Java开发者的首选框架之一。它的成功并非偶然,而是源于其独特的优势和特点,这些优势使得Spring Boot在开发社区中备受青睐。以下是Spring Boot的几个显著优势:
(1)快速开发
Spring Boot通过提供一系列的Starter依赖,极大地简化了项目的搭建过程。开发者无需手动配置数据库连接、消息队列、缓存等中间件,只需添加相应的Starter,Spring Boot即可自动配置这些组件。这种“开箱即用”的特性极大地缩短了项目从零到一的构建时间,提高了开发效率。
(2)自动配置
自动配置是Spring Boot的核心特性之一。Spring Boot能够根据项目中添加的依赖自动配置Spring框架的各个组件,这意味着开发者无需手动编写大量的配置文件。自动配置不仅减少了配置的工作量,还减少了出错的可能性,使得开发者可以更加专注于业务逻辑的实现。
(3)微服务支持
在云计算和微服务架构日益流行的今天,Spring Boot提供了强大的微服务支持。它不仅能够快速构建单个微服务,还能通过Spring Cloud等工具实现服务发现、负载均衡、断路器等高级功能,从而简化微服务架构的搭建和运维。
以下是Spring Boot的更多优势:
(4)无代码生成和XML配置
Spring Boot倡导使用注解来替代传统的XML配置,这使得配置更加简洁明了。开发者可以通过简单的注解来配置Spring框架的各个组件,无需编写冗长的XML文件,从而降低了学习曲线和维护成本。
(5)独立运行
Spring Boot内置了Tomcat、Jetty或Undertow等服务器,这意味着开发者可以创建一个独立的jar文件,直接运行而无需部署到外部的应用服务器。这种“一键启动”的特性使得应用的部署和运维变得更加简单。
(6)丰富的社区和文档支持
Spring Boot拥有一个庞大且活跃的社区,开发者在这里找到大量的教程、示例和最佳实践。同时,Spring Boot的官方文档也非常完善,涵盖了从入门到高级的各个方面,帮助开发者快速上手和使用。
(7)易于监控和管理
Spring Boot提供了强大的监控和管理功能,如Actuator模块,它能够提供应用的健康状况、性能指标、垃圾回收等信息。这些信息可以帮助开发者更好地监控和管理应用,确保应用的高可用性和稳定性。
(8)灵活的配置选项
虽然Spring Boot提供了默认配置,但它并不限制开发者进行个性化配置。开发者可以根据自己的需求,通过配置文件、环境变量、命令行参数等多种方式来调整应用的配置。
(9)易于集成
Spring Boot可以轻松地与其他Spring项目或第三方库集成,如Spring Data、Spring Security、Thymeleaf等。这种集成能力使得Spring Boot能够满足不同类型项目的需求,无论是Web应用、RESTful服务还是数据访问。
(10)支持多种开发环境
Spring Boot支持多种开发环境,包括但不限于IDE、命令行、Gradle和Maven。这意味着开发者可以根据自己的喜好和项目需求选择最合适的开发工具。
总之,Spring Boot的优势在于它能够极大地简化Java应用的创建和部署过程,提供了一种快速、高效、灵活的开发方式。通过这些优势,Spring Boot不仅提高了开发效率,还降低了维护成本,使得Java开发者能够更好地应对现代软件开发的需求和挑战。
3、Spring Boot的发展历程
Spring Boot作为现代Java开发的重要框架之一,其发展历程充满了创新和突破。下面,我们将详细回顾Spring Boot的起源、成长和演变,以及它如何成为当今Java开发领域的佼佼者。
(1)Spring Boot的起源
Spring Boot的诞生可以追溯到2013年,当时Pivotal的工程师Phil webb和Dave Syer开始着手解决Java应用开发中的繁琐配置问题。他们基于Spring框架,希望创建一个能够简化开发流程、减少配置工作的框架。经过一年的努力,Spring Boot 1.0版本于2014年正式发布,它迅速在Java社区中引起了广泛关注。
(2)Spring Boot 1.x版本的发展
在1.x版本中,Spring Boot迅速发展,不断完善和增强其功能。以下是Spring Boot 1.x版本的一些重要里程碑:
- 2014年4月,Spring Boot 1.0.0.RELEASE正式发布,标志着Spring Boot的诞生。
- 2015年,Spring Boot 1.2.x版本发布,引入了更多的Starter依赖,进一步简化了项目搭建过程。
- 2016年,Spring Boot 1.3.x版本发布,增加了对Java 8的全面支持,并且改进了自动配置功能。
- 2017年,Spring Boot 1.5.x版本发布,引入了对Spring Framework 5的支持,并且增强了微服务支持。
在这一阶段,Spring Boot逐渐成熟,成为Java开发者构建微服务和云应用的首选框架。
(3)Spring Boot 2.x版本的革新
2018年,Spring Boot 2.0.0.RELEASE版本发布,这一版本带来了许多重要的改进和革新:
- 引入了基于Spring Framework 5的全新核心功能,包括响应式编程模型和函数式编程支持。
- 对Java 8和Java 9提供了更好的支持,包括对模块化系统的兼容。
- 重新设计了Starter依赖,使得项目搭建更加灵活和高效。
- 引入了新的配置方式,如函数式配置,进一步简化了配置过程。
- 增加了对Kotlin和Groovy等编程语言的支持,拓宽了Spring Boot的应用范围。
Spring Boot 2.x版本继续巩固了其在Java开发领域的地位,并且随着Spring Cloud的成熟,成为了微服务架构的首选解决方案。
(4)Spring Boot的现代化发展
随着云计算和容器技术的兴起,Spring Boot也在不断适应和引领现代化开发趋势:
- Spring Boot与Docker和Kubernetes等容器技术紧密结合,使得部署和管理微服务变得更加简单。
- 引入了Spring Native,这是一个旨在将Spring Boot应用编译为原生映像的实验性项目,它能够大幅提高应用的启动速度和运行效率。
- Spring Boot继续扩展其生态系统的边界,与各种现代技术和框架集成,如Spring Data R2DBC、Spring WebFlux等。
(5)Spring Boot的未来展望
Spring Boot的未来看起来非常光明。随着Java平台的不断演进,Spring Boot将继续提供更加高效、灵活和易用的开发体验。它将继续支持新的Java版本和特性,同时也会引入更多的创新功能,以适应不断变化的技术环境。
总之,Spring Boot的发展历程是一个不断创新和进步的故事。从解决Java开发中的配置问题,到成为微服务架构的领导者,Spring Boot已经证明了其在现代软件开发中的重要地位。随着技术的不断进步,我们有理由相信,Spring Boot将继续引领Java开发的新潮流。
二、Spring Boot环境搭建
1、Java环境配置
在开始Spring Boot的学习之旅之前,首先需要确保我们的开发环境已经搭建完毕。Java环境是Spring Boot项目的基础,下面我们将详细介绍如何配置Java开发环境。
(1)Java环境配置详细步骤
1. 安装Java Development Kit (JDK)
Spring Boot建议使用Java 8或更高版本。首先,我们需要下载并安装JDK。可以从Oracle官方网站或者OpenJDK社区下载相应的版本。以下是安装JDK的步骤:
- 访问Oracle官方网站或OpenJDK社区网站下载JDK安装包。
- 运行安装程序,按照提示完成安装。
2. 配置环境变量
环境变量是告诉操作系统在哪里可以找到Java运行时环境的关键。以下是配置环境变量的步骤:
-
Windows系统:
- 右键点击“计算机”或“此电脑”,选择“属性”。
- 在系统窗口中选择“高级系统设置”。
- 在系统属性窗口中点击“环境变量”。
- 在系统变量中添加
JAVA_HOME变量,其值为JDK安装路径(例如C:\\Program Files\\Java\\jdk-1.8.0_251)。 - 编辑
Path变量,添加%JAVA_HOME%\\bin。
-
macOS和Linux系统:
- 打开终端。
- 编辑
~/.bashrc或~/.zshrc文件,添加以下行:export JAVA_HOME=/path/to/your/jdk export PATH=$JAVA_HOME/bin:$PATH - 保存文件并运行
source ~/.bashrc或source ~/.zshrc使变量生效。
3. 验证安装
配置完环境变量后,我们需要验证Java是否正确安装。在命令行中输入以下命令:
java -version
如果返回了Java的版本信息,则表示Java环境配置成功。
4. 配置Java编译器
为了更高效地开发Java程序,我们可以配置一个Java编译器。如果你使用的是IDE(如IntelliJ IDEA或Eclipse),通常这些IDE会自动配置编译器。如果你使用的是命令行,可以安装javac命令行工具,它随JDK一起提供。
5. 管理多个Java版本
有时候,我们可能需要同时使用多个Java版本。在这种情况下,可以使用jenv(对于macOS和Linux)或JDK Manager(对于Windows)这样的工具来管理Java版本。
总结
Java环境配置是Spring Boot开发的基础。确保JDK安装正确,环境变量配置无误,以及能够熟练使用Java编译器,将有助于我们顺利地进行后续的Spring Boot学习和开发工作。通过上述步骤,我们已经为Spring Boot项目的搭建打下了坚实的基础。接下来,我们将继续探讨如何搭建Maven环境以及Spring Boot项目结构的解析。
2、Maven环境配置
在上一节中,我们已经完成了Java环境的配置。接下来,我们将进入Maven环境的搭建,这是确保Spring Boot项目能够顺利构建和运行的关键步骤。
(1)Maven简介
Maven是一个项目管理和构建自动化工具,它基于项目对象模型(POM)的概念,通过简单的配置文件即可管理项目的依赖、构建过程和插件。在Spring Boot项目中,Maven负责管理和下载项目所需的依赖库,以及执行编译、测试、打包等构建任务。
(2)Maven环境配置详细步骤
1. 安装Maven
首先,我们需要从Maven的官方网站下载最新版本的Maven安装包。以下是安装Maven的步骤:
- 访问Maven官方网站下载最新版本的Maven安装包。
- 解压下载的压缩文件到指定的目录(例如
C:\\Program Files\\Apache\\Maven)。
2. 配置环境变量
与Java环境配置类似,我们需要将Maven添加到系统的环境变量中,以便在命令行中全局访问Maven命令。
-
Windows系统:
- 打开“环境变量”窗口,添加一个新的系统变量
MAVEN_HOME,其值为Maven的安装路径(例如C:\\Program Files\\Apache\\Maven)。 - 编辑
Path变量,添加%MAVEN_HOME%\\bin。
- 打开“环境变量”窗口,添加一个新的系统变量
-
macOS和Linux系统:
- 打开终端。
- 编辑
~/.bashrc或~/.zshrc文件,添加以下行:export MAVEN_HOME=/path/to/your/maven export PATH=$MAVEN_HOME/bin:$PATH - 保存文件并运行
source ~/.bashrc或source ~/.zshrc使变量生效。
3. 验证安装
配置完环境变量后,我们需要验证Maven是否正确安装。在命令行中输入以下命令:
mvn -version
如果返回了Maven的版本信息,则表示Maven环境配置成功。
4. 配置Maven本地仓库
Maven默认使用本地仓库来存储下载的依赖项。如果需要,我们可以修改本地仓库的默认位置。
- 打开Maven的配置文件
conf/settings.xml。 - 找到
<localRepository>标签,并设置一个新的路径(例如<localRepository>/path/to/your/local/repo</localRepository>)。
5. 配置Maven国内镜像
由于网络原因,直接从国外服务器下载依赖可能会比较慢。因此,我们可以配置一个国内的Maven镜像,如阿里云镜像,以提高下载速度。
- 打开Maven的配置文件
conf/settings.xml。 - 在
<mirrors>标签下添加以下内容:<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/repository/central</url><mirrorOf>central</mirrorOf> </mirror>
6. 创建Maven项目
使用Maven命令行工具,我们可以快速创建一个基础的Spring Boot项目结构。
- 打开命令行,切换到希望创建项目的目录。
- 运行以下命令:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-spring-boot-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
7. 管理依赖
在项目的pom.xml文件中,我们可以定义项目所需的依赖项。Spring Boot提供了大量的Starter依赖,这些依赖可以帮助我们快速集成Spring框架的各种功能。
- 打开
pom.xml文件。 - 在
<dependencies>标签中添加所需的依赖项。
总结
Maven环境的配置是Spring Boot项目开发的关键环节。通过上述步骤,我们已经搭建了一个功能齐全的Maven环境,这将有助于我们高效地管理项目依赖和构建过程。
3、Spring Boot项目结构解析
Spring Boot项目的结构是其强大功能和便捷性的基础。理解项目结构对于开发者来说至关重要,它不仅帮助我们高效地开发应用,还使得项目维护变得更加简单。下面,我们将深入解析一个典型的Spring Boot项目结构。
(1)项目基本组成
一个标准的Spring Boot项目通常包含以下文件和目录:
src/main/java: 存放Java源代码。src/main/resources: 存放资源文件,如配置文件、静态资源等。src/main/webapp: 存放Web应用相关的资源,如HTML、CSS、JavaScript等(在Spring Boot中不常用)。src/test/java: 存放测试代码。src/test/resources: 存放测试资源文件。pom.xml或build.gradle: Maven或Gradle的构建配置文件。.gitignore: 配置Git忽略的文件和目录。
(2)Java源代码结构
在src/main/java目录下,项目通常遵循以下结构:
com/example/myapp: 项目的基本包,通常包含以下子包:controller: 包含处理HTTP请求的控制器类。service: 包含业务逻辑的接口和实现类。repository: 包含数据访问层的接口,通常与数据库实体相对应。entity: 包含数据库实体的类。dto: 包含数据传输对象(Data Transfer Object),用于在服务层和控制器层之间传输数据。vo: 包含视图对象(View Object),用于封装返回给前端的数据。exception: 包含自定义的异常类。config: 包含配置类,如数据库配置、MVC配置等。
(3)资源文件
在src/main/resources目录下,通常包含以下文件和目录:
application.properties或application.yml: Spring Boot应用的配置文件,用于定义应用级别的配置,如数据库连接信息、服务器端口等。application-dev.properties或application-dev.yml: 开发环境下的配置文件。application-prod.properties或application-prod.yml: 生产环境下的配置文件。static: 存放静态资源,如CSS、JavaScript、图片等。templates: 存放Thymeleaf等模板引擎的模板文件。i18n: 存放国际化资源文件,如.properties文件。
(4)测试代码
在src/test/java目录下,通常包含以下结构:
com/example/myapp: 与主代码包结构类似,通常包含以下子包:controller: 包含对控制器类的单元测试。service: 包含对服务层逻辑的单元测试。repository: 包含对数据访问层的单元测试。integration: 包含集成测试,用于测试应用的不同组件之间的交互。
(5)构建配置文件
pom.xml 或 build.gradle 文件是项目的构建配置文件它定义了项目的依赖项、构建过程、等。
pom.xml: Maven项目的构建配置文件,包含了项目的依赖管理、构建插件、打包配置等信息。build.gradle: Gradle项目的构建配置文件,提供了类似的构建配置功能。
(6)项目构建和运行
通过Maven或Gradle,我们可以构建和运行Spring Boot项目。以下是一些常用的命令:
mvn clean: 清理项目构建目录。mvn compile: 编译项目源代码。mvn package: 打包项目为可执行的JAR文件。mvn spring-boot:run: 运行Spring Boot应用。gradle build: 构建项目。gradle bootRun: 运行Spring Boot应用。
(7)总结
Spring Boot项目的设计旨在简化Java应用的开发流程。通过遵循这种结构,开发者可以快速搭建项目框架,集中精力在业务逻辑的实现上。理解项目结构的每个组成部分,以及它们之间的相互关系,对于开发高质量的Spring Boot应用至关重要。在接下来的章节中,我们将探讨Spring Boot的自动配置原理和Starter依赖的使用,这将进一步加深我们对Spring Boot的理解和运用。
三、Spring Boot核心功能
1、自动配置原理
Spring Boot的自动配置是其最核心的功能之一,它让开发者能够快速启动并运行一个Spring应用,而无需进行大量的配置工作。下面,我们将详细探讨Spring Boot自动配置的原理。
(1)自动配置的工作流程
Spring Boot的自动配置是通过spring-boot-autoconfigure模块实现的。当你启动Spring Boot应用时,以下是自动配置的工作流程:
-
启动类:Spring Boot应用的入口点是包含
public static void main(String[] args)方法的类,该类通常会使用@SpringBootApplication注解进行标注。这个注解是一个组合注解,它整合了@Configuration、@EnableAutoConfiguration和@ComponentScan。 -
@EnableAutoConfiguration:这个注解告诉Spring Boot基于类路径设置、其他bean和各种属性设置来添加bean。Spring Boot会查找META-INF/spring.factories文件中配置的EnableAutoConfiguration条目,并加载相应的自动配置类。 -
自动配置类:自动配置类通常包含
@Configuration注解,并且会使用@Conditional注解(如@ConditionalOnClass、@ConditionalOnBean等)来控制它们的加载条件。这些类会根据当前环境下的类路径、bean定义和其他配置项来决定是否需要创建某些bean。 -
条件注解:Spring Boot使用了一系列的条件注解来确保只有在满足特定条件时才会创建bean。例如,
@ConditionalOnMissingBean注解会检查容器中是否已经存在某个bean的实例,如果不存在,则会创建一个新的实例。
(2)自动配置的定制
虽然Spring Boot的自动配置旨在提供“开箱即用”的体验,但开发者仍然可以根据自己的需求对其进行定制。
-
排除自动配置:如果某个自动配置类不符合你的需求,你可以使用
exclude属性在@SpringBootApplication或@EnableAutoConfiguration注解中排除它。 -
添加自定义配置:你可以通过创建自己的配置类来添加自定义的bean定义,这些配置类可以使用
@Configuration注解,并包含必要的@Bean方法。 -
修改默认配置:如果你需要修改某个自动配置的默认行为,可以定义一个具有相同bean名称的自定义bean,Spring Boot会使用你提供的bean替代自动配置的bean。
(3)自动配置的挑战
尽管自动配置带来了极大的便利,但它也带来了一些挑战。以下是一些开发者可能面临的问题:
- 理解自动配置:自动配置的工作方式可能对初学者来说不够直观,理解其背后的原理需要一定的时间。
- 调试困难:当自动配置出现问题导致应用无法启动时,调试可能比较困难,因为自动配置的细节通常是隐藏的。
- 性能考虑:自动配置可能会创建一些不必要的bean,这可能会影响应用性能。
(4)总结
Spring Boot的自动配置原理是Spring Boot成功的关键之一。它极大地简化了Spring应用的配置过程,使得开发者可以快速启动和运行一个应用。理解自动配置的工作流程和定制方法,有助于我们更好地利用Spring Boot的优势,同时也能够在面对配置问题时更加从容不迫。在下一节中,我们将探讨如何使用Spring Boot的Starter依赖来进一步简化开发过程。
2、Starter依赖的使用
Spring Boot的Starter依赖是Spring Boot框架中一个非常便利的特性,它旨在进一步简化Spring应用的初始搭建和开发过程。通过使用Starter依赖,开发者可以快速集成Spring框架的各种功能模块,无需手动添加和配置相关的依赖项。
(1)Starter依赖的定义
Starter依赖是一种特殊的Spring Boot依赖,它封装了Spring框架中特定功能模块的依赖关系,以及相应的自动配置。这意味着当你添加了一个Starter依赖到你的项目中时, Boot会自动配置相关的功能,无需额外的配置代码。
(2)Starter依赖的工作原理
Spring Boot的Starter依赖基于以下几个核心概念:
-
依赖管理:Starter依赖会包含所有必要的库依赖,确保开发者不需要手动添加它们。
-
自动配置:每个Starter依赖通常都会包含一个或多个自动配置类,这些类负责根据项目的类路径和其他配置信息自动配置相关的功能。
-
条件注解:自动配置类使用条件注解(如
@ConditionalOnClass、@ConditionalOnBean等)来确保只有在满足特定条件时才会进行配置。
(3)常用的Starter依赖
以下是Spring Boot提供的一些常用Starter依赖,它们Web开发、数据库操作、安全认证等多个领域:
-
spring-boot-starter-web:提供全栈Web开发的支持,包括Tomcat、Spring MVC、JSON、HTTP客户端等。
-
spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate,用于数据库操作。
-
spring-boot-starter-security:集成Spring Security,安全认证和授权支持。
-
spring-boot-starter-thymeleaf:集成Thymeleaf模板引擎,用于Web页面渲染。
-
spring-boot-starter-actuator:提供管理和监控应用的能力,如健康检查、指标收集等。
(4)使用Starter依赖的步骤
以下是使用Spring Boot Starter依赖的基本步骤:
-
添加依赖:在项目的
pom.xml文件或build.gradle文件中添加所需的Starter依赖。<!-- pom.xml --> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 其他Starter依赖 --> </dependencies> -
自动配置:Spring Boot会根据添加的Starter依赖自动配置相应的功能。例如,如果你添加
spring-boot-starter-web,Spring Boot会自动配置内嵌的Web服务器和Spring MVC。 -
自定义配置:如果需要,你可以在
application.properties或application.yml文件中添加自定义配置,覆盖默认的自动配置。 -
编写代码:现在,你可以开始编写业务逻辑代码,利用Spring Boot提供的自动配置和Starter依赖来简化开发。
(5)Starter依赖的定制
除了使用Spring Boot提供的官方Starter依赖外,开发者还可以创建自己的Starter依赖。这可以通过以下步骤实现:
-
创建Maven项目:创建Maven项目,用于开发自定义的Starter。
-
添加依赖:添加必要的依赖,
spring-boot-autoconfigure,以便使用Spring Boot的自动配置机制。 -
编写自动配置类:创建自动配置类,使用条件注解来定义配置规则。
-
打包和发布:将自定义Starter打包为JAR文件,并发布到Maven仓库或本地仓库中。
-
在项目中使用:在需要使用自定义Starter的项目中添加依赖。
(6)总结
Spring Boot的Starter依赖是Spring Boot框架的一个强大特性,它极大地简化了Spring应用的搭建和开发过程。通过使用Starter依赖,开发者可以快速启动项目,并利用Spring Boot的自动配置来减少配置工作。掌握Starter依赖的使用和定制,对于Spring Boot开发者来说是一项重要的技能。在下一节中,我们将探讨如何使用Spring Boot管理和监控应用,应用的稳定运行和性能优化。
3、管理和监控应用
Spring Boot不仅提供了自动配置和Starter依赖来简化开发,还内置了强大的管理和监控功能,使得开发者能够轻松监控和管理应用程序的运行状态和性能。这些功能对于确保应用的稳定运行和优化至关重要。
(1)管理和监控的重要性
在现代软件开发中,管理和监控应用是非常关键的环节。它们可以帮助开发者:
- 快速诊断和解决问题。
- 监控应用性能,确保服务质量和用户体验。
- 预防潜在的问题,如内存泄漏、线程死锁等。
- 实现自动化运维,降低人工干预的成本。
(2)Spring Boot Actuator
Spring Boot Actuator是Spring Boot提供的一个管理和监控应用的健康状况和性能的模块。它通过暴露一系列端点(Endpoint)来提供这些功能,这些端点可以是HTTP端点,也可以是JMX端点。
(3)Actuator的端点
Spring Boot Actuator提供了多种端点,以下是一些常用的端点:
/health:显示应用的健康状况。/info:显示应用信息,如构建信息、环境变量等。/metrics:提供各种度量信息,如内存使用情况、垃圾回收统计等。/dump:生成线程快照,用于分析线程死锁等问题。/trace:显示跟踪信息,记录请求链路。/auditevents:显示审计事件信息。
(4)启用Actuator
要启用Actuator,你需要在项目中添加spring-boot-starter-actuator依赖,并在application.properties或application.yml文件中进行配置。
# application.yml
management:endpoints:web:exposure:include: \\`上面的配置暴露了所有Actuator端点。你也可以选择性地暴露特定的端点。
(5)使用Actuator
一旦启用了Actuator,你就可以通过HTTP请求来访问这些端点。,访问/health端点可能会得到以下响应:
{\status\ \UP\`
}
这表明应用处于健康状态。
(6)自定义Actuator端点
Spring Boot允许你自定义Actuator端点的行为,包括端点的ID、是否启用以及访问权限等。
# application.yml
management:endpoints:web:exposure:include: \\ custom:health:id: myhealthenabled: truesensitive: false
在上面的配置中,我们将/health端点的ID自定义为了myhealth,并允许所有用户访问。
(7)监控和管理工具
除了Actuator端点,Spring Boot还支持与其他监控和管理工具集成,如:
- Micrometer:用于收集应用度量信息,并与Prometheus、Graphite等监控系统集成。
- Spring Boot Admin:一个管理和监控Spring Boot应用的Web界面。
- Docker:Spring Boot应用可以部署在Docker容器中,利用Docker的监控和日志功能。
(8)应用性能监控
Spring Boot应用性能监控通常涉及以下几个方面:
- 响应时间:监控Web请求的响应时间,确保快速响应。
- 资源使用:监控CPU、内存、磁盘等资源的使用情况。
- 数据库性能:监控数据库查询性能,优化慢查询。
- 垃圾回收:监控垃圾回收活动,预防内存泄漏。
(9)日志管理
Spring Boot使用Logback作为默认的日志框架,并提供了日志级别、日志格式等配置选项。通过配置文件,你可以轻松地管理日志的输出。
# application.yml
logging:level:root: INFOorg.springframework.web: DEBUGpattern:console: \d{yyyy-MM-dd HH:mm:ss} - %msg%n\`
在上面的配置中,我们设置了根日志级别为INFO,Spring Web相关的日志级别为DEBUG,并指定了控制台日志的输出格式。
(10)总结
Spring Boot的管理和监控功能为开发者提供了一套全面的工具和端点,用于监控和管理应用的健康状况和性能。通过合理使用这些功能,开发者可以确保应用的高可用性和性能,从而提高用户满意度和运维效率。在下一节中,我们将通过实战案例来展示如何使用Spring Boot创建Web应用、整合数据库操作和构建RESTful API。
四、Spring Boot实战案例
1、创建一个简单的Web应用
四、Spring Boot实战案例
1、创建一个简单的Web应用
Spring Boot的强大之处在于它能够让我们以最少的配置快速搭建起一个功能完备的Web应用。下面,我们将通过一个详细的步骤来创建一个简单的Web应用,让你感受Spring Boot的便捷和高效。
(1)创建项目
首先,我们需要创建一个新的Spring Boot项目。有多种方式可以创建项目,最简单的方式是使用Spring Initializr(https://start.spring.io/)。
- 打开Spring Initializr网站。
- 填写项目元数据,如Group、Artifact、Name等。
- 选择所需的依赖,对于Web应用,我们至少需要勾选“Spring Web”。
- 选择项目的构建系统(Maven或Gradle)和Java版本。
- 点击“Generate”生成项目。
生成后,你会得到一个压缩包,解压后即可在IDE中导入项目。
(2)项目结构解析
解压后的项目通常包含以下文件和目录:
src/main/java/:存放Java源代码。src/main/resources/:存放资源文件,如配置文件、静态资源等。src/test/java/:存放测试代码。pom.xml或build.gradle:构建配置文件。
在src/main/java/目录下,通常会有一个主类,它负责启动Spring Boot应用。
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
(3)创建Controller
接下来,我们创建一个简单的Controller来处理HTTP请求。
- 在
src/main/java/目录下创建一个包,例如com.example.demo.controller。 - 在该包中创建一个名为
HelloController的类。
@RestController
@RequestMapping("hello")
class HelloController {@GetMappingpublic String hello() {return "Hello, World!" }
}
在这个例子中,我们使用了@RestController注解来标记这个类是一个控制器,并且所有的方法返回的数据直接写入HTTP响应体中。@RequestMapping(\hello\指定了访问这个控制器的路径。@GetMapping注解表示这个方法响应GET请求。
(4)运行应用
现在,我们可以运行应用了。通常,你可以直接右键点击主类Application,选择“Run ‘Application.main()’`来启动应用。
应用启动后,你可以在浏览器中访问http://localhost:8080/hello,你应该会看到“Hello, World!”的响应。
(5)配置应用
Spring Boot的默认配置通常足够我们创建一个简单的Web应用。但是,有时候我们可能需要自定义一些配置,比如修改服务器端口、数据库配置等。这些配置可以在application.properties或application.yml文件中设置。
例如,如果你想要将服务器端口改为8090,你可以在application.properties文件中添加以下行:
server.port=8090
(6)测试应用
为了确保我们的应用按预期工作,我们应该编写一些测试。Spring Boot支持多种测试,包括单元测试和集成测试。
在src/test/java/目录下,我们可以创建一个测试类HelloControllerTest来测试我们的HelloController。
@WebMvcTest(HelloController.class)
public class HelloControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testHello() throws Exception {mockMvc.perform(MockMvcRequestBuilders.get(\hello\ .andExpect(MockMvcResultMatchers.content().string(\Hello, World!\ }
}
在这个测试类中,我们使用了@WebMvcTest来加载HelloController的上下文,并使用MockMvc来模拟HTTP请求。
(7)总结
通过以上步骤,我们成功地创建了一个简单的Spring Boot Web应用。这个例子展示了Spring Boot如何简化Web应用的创建和配置过程。在实际开发中,Spring Boot还能够处理更复杂的场景,如数据库集成、安全认证、微服务架构等,让你能够专注于业务逻辑的实现,而不是繁琐的配置工作。在接下来的实战案例中,我们将探讨如何在Spring Boot中整合数据库操作和构建RESTful API。
2、整合数据库操作
在现代Web应用中,数据库操作是不可或缺的一部分。Spring Boot能够极大地简化数据库的集成和操作。以下是如何在Spring Boot项目中整合数据库操作的详细步骤。
(1)选择数据库和依赖
首先,选择合适的数据库和对应的Spring Boot Starter依赖。Spring Boot支持多种数据库,如MySQL、PostgreSQL、Oracle、MongoDB等。以下是一个使用MySQL数据库的例子。
在pom.xml中添加以下依赖:
<dependencies><!-- Spring Boot Starter Data JPA 用于集成JPA --><dependency><>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 其他依赖... -->
</dependencies>
(2)配置数据库连接
在application.properties或application.yml中配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
这里,spring.datasource下的配置项用于指定数据库连接的URL、用户名、密码和驱动类名。spring.jpa.hibernate.ddl-auto配置项用于设置自动创建、更新或验证数据库表结构的策略。
(3)创建实体类
实体类是数据库表的映射,使用JPA注解来定义实体和表之间的关系。
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false, unique = true)private String username;@Column(nullable = false)private String password;// 省略getter和setter方法
}
在这个例子中,我们创建了一个User实体类,它包含id、username和password三个字段。@Entity注解表示这是一个实体类,@Id和@GeneratedValue注解表示id字段是主键,并且其值由JPA自动管理。
(4)创建数据访问层
数据访问层(Repository Layer)负责数据的持久化操作。在Spring Boot中,我们可以通过简单地继承JpaRepository接口来创建一个数据访问层。
public interface UserRepository extends JpaRepository<User, Long> {// 可以添加自定义查询方法
}
在这个例子中,UserRepository接口继承了JpaRepository,它提供了基本的CRUD操作。如果你需要自定义查询,可以直接在接口中添加方法。
(5)使用数据访问层
现在,我们可以在服务层中使用UserRepository来执行数据库操作。
@Service
public class UserService {private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}public User saveUser(User user) {return userRepository.save(user);}// 其他业务逻辑...
}
在UserService服务类中,我们注入了UserRepository,并使用它来保存用户信息。
(6)测试数据库操作
为了确保数据库操作正常工作,我们应该编写一些测试。
@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testSaveUser() {User user = new User();user.setUsername(\testuser\ user.setPassword(\password\ User savedUser = userService.saveUser(user);assertNotNull(savedUser);assertEquals(\testuser\ savedUser.getUsername());}
}
在这个测试中,我们使用了@SpringBootTest注解来加载应用上下文,并注入了UserService。然后我们测试了保存用户的功能。
通过以上步骤,我们成功地整合了数据库操作到Spring Boot项目中。在实际开发中,我们可能还需要处理事务管理、复杂查询、分页和排序等高级功能。Spring Boot通过其提供的丰富工具和抽象,使得这些操作变得简单而高效。
3、构建RESTful API
在当今的Web开发中,RESTful API已经成为前后端分离架构下的主流数据交互方式。Spring Boot以其出色的轻量级和易用性,使得构建RESTful API变得更加简单快捷。下面,我们将详细介绍如何在Spring Boot中构建RESTful API。
(1)RESTful API的基本概念
RESTful API是基于REST(Representational State Transfer)架构风格的API设计方法。它使用HTTP协议的GET、POST、PUT、DELETE等方法,分别对应资源的检索、创建、更新和删除操作。RESTful API的设计原则是简洁、一致、易于理解和维护。
(2)创建RESTful API的基础步骤
在Spring Boot中创建RESTful API通常包括以下步骤:
- 定义资源模型:确定API要操作的资源,比如用户(User)、订单(Order)等。
- 创建实体类:为每个资源创建对应的实体类,这些类通常对应数据库中的表。
- 创建控制器类:编写控制器类来处理HTTP请求,并返回响应。
- 定义服务层:服务层负责业务逻辑的处理,如数据验证、业务规则等。
- 数据访问层:数据访问层负责与数据库的交互,如数据的持久化操作。
(3)实战:构建用户管理API
以下是一个构建用户管理API的实战案例。
定义实体类
首先,我们定义一个User实体类:
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String email;private String password;// 省略getter和setter方法
}
创建控制器类
然后,我们创建一个UserController类来处理与用户相关的HTTP请求:
@RestController
@RequestMapping("api/users")
class UserController {private final UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@GetMappingpublic ResponseEntity<List<User>> getAllUsers() {List<User> users = userService.findAllUsers();return ResponseEntity.ok(users);}@GetMapping(\id}\ public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.findUserById(id);return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.createUser(user);return new ResponseEntity<>(createdUser, HttpStatus.CREATED);}@PutMapping(\id}\ public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {User updatedUser = userService.updateUser(id, userDetails);return ResponseEntity.ok(updatedUser);}@DeleteMapping(\id}\ public ResponseEntity<Void> deleteUser(@PathVariable Long id) {userService.deleteUser(id);return ResponseEntity.noContent().build();}
}
在这个控制器中,我们定义了五个方法来处理获取所有用户、获取单个用户、创建用户、更新用户和删除用户的请求。每个方法都返回一个ResponseEntity对象,它包含了响应的状态码和数据。
定义服务层
服务层UserService负责处理业务逻辑:
@Service
public class UserService {private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}public List<User> findAllUsers() {return userRepository.findAll();}public User findUserById(Long id) {return userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(\User not found with id: \ + id));}public User createUser(User user) {return userRepository.save(user);}public User updateUser(Long id, User userDetails) {User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(\User not found with id: \ + id));user.setUsername(userDetails.getUsername());user.setEmail(userDetails.getEmail());user.setPassword(userDetails.getPassword());return userRepository.save(user);}public void deleteUser(Long id) {User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(\User not found with id: \ + id));userRepository.delete(user);}
}
在这里,我们使用了UserRepository来与数据库交互,并实现了基本的CRUD操作。
异常处理
为了提供更友好的错误响应,我们可以使用@ControllerAdvice和@ExceptionHandler注解来定义全局异常处理器:
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Resource.class)public ResponseEntity<Object> handleResourceNotFoundException(ResourceNotFoundException ex) {return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);}// 其他异常处理...
}
这样,当ResourceNotFoundException异常被抛出时,我们的API将返回一个404状态码和错误消息。
(4)测试RESTful API
最后,我们可以使用工具如Postman或curl来测试我们的API,确保它们按照预期工作。
通过以上步骤,我们构建了一个基本的用户管理API。在实际项目中,我们可能还需要考虑安全性(如使用Spring Security进行身份验证和授权)、数据验证、异常处理、日志记录、API文档(如使用Springfox或OpenAPI)等更多高级功能。Spring Boot提供了丰富的工具和库来支持这些需求,使得构建RESTful API变得更加高效和愉悦。
相关文章:
Spring Boot项目实战教程:快速构建Web应用与RESTful API
目录 一、Spring Boot简介1、Spring Boot的定义2、Spring Boot的优势(1)快速开发(2)自动配置(3)微服务支持(4)无代码生成和XML配置(5)独立运行(6&…...
OpenAI 开发者大会!实时语音功能有API了,GPT-4o支持多模态微调,上下文cache功能上线
家人们!十一假期第1天, OpenAI一年一度的开发者大会又来了惹!今年的开发者大会分成三部分分别在美国、英国、新加坡三个地点举办,刚刚结束的是第一场。 去年的OpenAI开发者大会公布了GPT-4 Turbo和GPTs,今年没有大更新…...
解决ros2 rviz Fixed Frame No TF data问题
新建一个终端,然后输入 :map后的数字可以任意,100也可以。注意map与框架名称一致。 rosrun tf2_ros static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 map 5...
Python数据分析篇--NumPy--进阶
人有一种天生的、难以遏制的欲望,那就是在理解之前就评判。 -- 米兰昆德拉 多维数组 1. 一维数组只有行,二维数组相比一维数组多了列这个维度,而三维数组则类似多个二维数组堆叠在一起,形如一个立方体。 二维数组的创建 1. 二…...
基于Arduino的宠物食物分配器
创作本文的初衷是本人的一个养宠物的梦想(因为家里人对宠物过敏,因此养宠物的action一直没有落实),但是梦想总是要有的哈哈哈哈哈。上周正好是和一个很好的朋友见面,聊到了养宠物的事情,她大概是讲到了喂宠…...
make和Makefile
make是一个命令工具,用于读取并执行名为Makefile(makefile)的文件中定义的规则。 Makefile是一个文本文件,它告诉make哪些文件依赖于其他文件,以及如何从这些依赖项生成最终的目标文件。 我们先简单看一下使用make的…...
【数学分析笔记】第4章第4节 复合函数求导法则及其应用(2)
4. 微分 4.4 复合函数求导法则及其应用 【例4.4.3】 y e 1 cos x ye^{\sqrt{1\cos x}} ye1cosx ,求 y ′ y y′ 【解】 y ′ e 1 cos x ⋅ 1 2 1 cos x ⋅ ( − sin x ) − sin x 2 1 cos x e 1 cos x ye^{\sqrt{1\cos x}}\cdot\f…...
【预备理论知识——2】深度学习:线性代数概述
简单地说,机器学习就是做出预测。 线性代数 线性代数是数学的一个分支,主要研究向量空间、线性方程组、矩阵理论、线性变换、特征值和特征向量、内积空间等概念。它是现代数学的基础之一,并且在物理学、工程学、计算机科学、经济学等领域有着…...
【目标检测】yolo的三种数据集格式
目标检测中数据集格式之间的相互转换--coco、voc、yolohttps://zhuanlan.zhihu.com/p/461488682?utm_mediumsocial&utm_psn1825483604463071232&utm_sourcewechat_session【目标检测】yolo的三种数据集格式https://zhuanlan.zhihu.com/p/525950939?utm_mediumsocial&…...
数据分析案例-机器学习工程师薪资数据可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
Django连接Dify、ChatGPT4o并计算tokens数量方法
通过Dify可以连接很多模型国内、国外的都可以进行选择可以到Dify里创建一个空白应用,然后点击进入就可以看到API了api_url "http://192.168.15.131/v1/chat-messages" api_key "app-UtzTpVNwpTLUcGvRNnnK9QNY" headers {"Authorization…...
面试系列-淘天提前批面试
00-淘天提前批面试 在牛客上看到了淘天提前批的面试题目,这里分析一下淘天面试的问了有哪些内容,面试的重点 是偏向哪些方面 项目相关 1、秒杀架构如何设计? 问了秒杀的架构如何设计,对于秒杀的设计,秒杀符合 写多读少…...
计算机中科学中有哪些空间换时间的操作??
计算机中科学中有哪些空间换时间的操作?? 1. SPOOLing (Simultaneous Peripheral Operations On-Line) 原理:SPOOLing 是一种将输入/输出操作缓存到磁盘或内存中的技术,从而在后台处理它们。这可以防止 CPU 等待慢速的外部设备&…...
Mac安装Manim并运行
1.在macOS上创建Python虚拟环境,可以使用venv模块,这是Python自带的库,也可以使用conda。以下是使用venv创建和使用Python虚拟环境的步骤: 打开终端。 创建一个新的目录来存放你的项目,并进入该目录: mk…...
leetcode58:最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大 子字符串 。 示例 1: 输入:s "Hello World" 输出ÿ…...
18448 最小生成树
### 思路 使用Kruskal算法求解图的最小生成树。Kruskal算法通过对所有边按权值排序,然后逐步选择最小权值的边,确保不会形成环,直到构建出最小生成树。 ### 伪代码 1. 读取输入的结点数n和边数m。 2. 读取每条边的信息,存储在边列…...
前端工程化 - Vue
环境准备 Vue-cli是Vue官方提供的一个脚手架,用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能: 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…...
使用 NVIDIA H100 上的 Azure 机密计算释放隐私保护 AI 的潜力
通过 NVIDIA H100 上的 Azure 机密计算释放隐私保护 AI 的潜力 文章目录 前言一、机密计算二、使用 NVIDIA H100 Tensor Core GPU 的 Azure 机密计算1. 安全功能2. 可扩展性和可编程性三、场景1. 模型机密性2. 推理/提示机密性3. 使用私有数据进行微调4. 多方培训结论前言 这是…...
目标检测与图像分类:有什么区别?各自的使用场景是什么?
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
Lua 数据类型
Lua 数据类型 Lua 是一种轻量级的编程语言,因其简单性和灵活性而广受欢迎。在 Lua 中,数据类型是编程的基础,它们决定了变量能够存储哪种类型的数据。Lua 的数据类型可以分为以下几个类别: 1. nil nil 是 Lua 中的一个特殊类型…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
