spring boot核心理解-各种starter
理解 Spring Boot 的 Starter
机制以及如何选择和使用各种 starter
,是开发 Spring Boot 应用的重要一环。Spring Boot Starter
是一组方便的依赖组合,用于简化 Spring 项目中的依赖管理。它们可以帮助开发者快速引入所需的库和自动配置,从而加快开发速度。让我们详细解释这句话的含义,并给出一些具体的示例。
理解Spring Boot Starter的作用
spring boot starter 是什么?
- Spring Boot Starter 是一组预先打包好的Maven依赖组合, 提供了开发某一类功能所需要的所有依赖。例如:spring-boot-starter-web包含了构建web应用所需要的所有库和配置(如springmvc, tomcat)
- Starter使开发者不再需要手动引入单个库或进行复杂的配置,而是通过一个Starter,就能得到对应功能的所有默认配置.
Starter的命名规则
-
官方提供的starter:所有官方发布的Starter都遵循以下命名模式:
spring-boot-starter-XXX
,例如spring-boot-starter-jdbc
。这些命名规则确保了官方Starter的统一性和可识别性 -
自定义的starter:任何第三方提供的Starter都遵循以下命名模式:
XXX-spring-boot-starter
,例如mybatis-spring-boot-starter
。这种命名规则有助于区分官方和自定义的Starter,确保使用的正确性和避免冲突
如何选择合适的 Starter
-
根据项目需求选择 Starter
- 如果要构建一个 RESTful API 服务,可以选择
spring-boot-starter-web
,它会包含 Spring MVC、内嵌 Tomcat 服务器等,用于快速构建 Web 服务。 - 如果需要与数据库交互,可以选择
spring-boot-starter-data-jpa
,它包含 Hibernate 和 Spring Data JPA,可以简化数据库操作。 - 如果项目中需要实现用户认证和授权功能,可以选择
spring-boot-starter-security
,它集成了 Spring Security。
- 如果要构建一个 RESTful API 服务,可以选择
-
了解每个 Starter 的组成
- 对于每个
Starter
,理解其默认包含的库和配置是很有帮助的。可以通过查看其pom.xml
文件了解它包含的依赖。 - 可以通过
mvn dependency:tree
命令查看引入某个Starter
后,项目中的所有依赖关系。
- 对于每个
使用 Starter 的示例
让我们通过一些常用 Starter
的示例,看看如何引入、使用它们以及它们的作用。
示例 1:spring-boot-starter-web
-
作用:用于构建 Web 应用,提供了 Spring MVC 和嵌入式 Tomcat 支持。
-
引入方式:在
pom.xml
中添加如下依赖:<dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>
-
功能:
- 提供 REST API 的开发支持。
- 内置 Tomcat 服务器,项目启动时不需要额外的容器配置。
- 包含 Jackson 库,用于 JSON 数据的序列化和反序列化。
-
示例代码:
@RestController @RequestMapping("/api") public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";} }
通过引入
spring-boot-starter-web
,我们可以直接编写 RESTful 控制器,Spring Boot 自动配置好了 Web 环境。
示例 2:spring-boot-starter-data-jpa
-
作用:用于与数据库交互,提供了 JPA 支持,并集成了 Hibernate。
-
引入方式:在
pom.xml
中添加如下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
-
功能:
- 自动配置了
EntityManager
、DataSource
等数据库相关的 Bean。 - 简化了 JPA 的配置,只需要提供基本的数据库连接信息(如 URL、用户名、密码)。
- 提供了
CrudRepository
和JpaRepository
接口,用于快速实现基本的增删改查功能。
- 自动配置了
-
配置项
-
使用
application.properties
文件进行配置 -
# 数据库连接 URL spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC# 数据库用户名 spring.datasource.username=root# 数据库密码 spring.datasource.password=your_password# JPA 的方言(根据数据库类型选择相应的方言) spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect# JPA 自动生成的 DDL 操作(更新表结构) spring.jpa.hibernate.ddl-auto=update# 打印 SQL 日志 spring.jpa.show-sql=true
- spring.datasource.url:指定连接的数据库 URL,这里是 MySQL 数据库的连接地址。替换
your_database_name
为你实际的数据库名称。 - spring.datasource.username 和 spring.datasource.password:数据库连接的用户名和密码。
- spring.jpa.database-platform:指定 JPA 使用的数据库方言。
MySQL8Dialect
是针对 MySQL 8 的方言。如果你使用的是其他版本或数据库,需要修改为对应的方言。 - spring.jpa.hibernate.ddl-auto:用于定义在启动时如何管理数据库表结构。常用的值有:
update
:如果表结构有变化,会自动更新。create
:每次启动时重新创建表(会丢失数据)。create-drop
:创建表,在会话结束时删除表。none
:不会做任何表结构管理。
- spring.jpa.show-sql:设置为
true
时会在控制台打印 SQL 语句,方便调试。 -
使用
application.yml
文件进行配置也可以使用
application.yml
格式进行配置:spring:datasource:url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTCusername: rootpassword: your_passwordjpa:database-platform: org.hibernate.dialect.MySQL8Dialecthibernate:ddl-auto: updateshow-sql: true
这个配置和
application.properties
的效果相同,只是格式不同(YAML 格式) -
示例代码:
@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> { }@Service public class UserService {@Autowiredprivate UserRepository userRepository;public List<User> getAllUsers() {return userRepository.findAll();} }
通过引入
spring-boot-starter-data-jpa
,可以轻松地与数据库交互,Spring Boot 自动配置了 JPA 所需的基础设施。
示例 3:spring-boot-starter-test
-
作用:用于测试,提供了 JUnit、Mockito、Spring Test 等。
-
引入方式:在
pom.xml
中添加如下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> </dependency>
-
功能:
- 提供测试支持,包括单元测试、集成测试。
- 内置了 MockMVC,用于模拟 HTTP 请求,测试 Web 控制器。
- 集成了 AssertJ 和 Mockito,用于断言和模拟。
-
示例代码:
@SpringBootTest public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testGetAllUsers() {List<User> users = userService.getAllUsers();assertNotNull(users);} }
通过引入
spring-boot-starter-test
,可以轻松编写和运行测试用例。
总结
-
Spring Boot Starter
是 Spring Boot 中的一种模块化设计,提供了常用的功能模块,并简化了依赖管理。 -
熟悉各种
Starter
的作用和使用方式,可以帮助开发者快速启动项目并完成特定功能的开发。 -
理解如何选择合适的
Starter
、查看其包含的内容,并根据项目需求进行合理的依赖管理,是高效使用 Spring Boot 的关键。
相关文章:

spring boot核心理解-各种starter
理解 Spring Boot 的 Starter 机制以及如何选择和使用各种 starter,是开发 Spring Boot 应用的重要一环。Spring Boot Starter 是一组方便的依赖组合,用于简化 Spring 项目中的依赖管理。它们可以帮助开发者快速引入所需的库和自动配置,从而加…...

解决海外社媒风控问题的工具——云手机
随着中国企业逐步进入海外市场,海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下,云手机作为一种新型技术解决方案,正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控,企业经常面临账号流…...

全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
软件简介 PDF Shaper是一款功能强大的PDF工具集,它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观,使得即使是新手用户也能快速上手。它支持广泛的功能&…...

Maven入门
Maven Maven Wrapper 版本一致性: Maven Wrapper 允许你在项目中指定一个特定的 Maven 版本。这意味着所有开发人员和 CI/CD 环境都将使用相同版本的 Maven,从而避免由于版本不一致导致的问题。 简化设置: 新开发者克隆项目时,…...

Chromium 中window.DOMParser接口说明c++
一、DOMParser DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。 备注: XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML,在其response 属性中返回Document。 你可以使用XMLSerializer 接口执行相反的操作 - 将…...

linux 安装gitlab
安装环境 CentOS 7.7 (centos6.10会报错)2g内存防火墙关闭 安装步骤: 1 安装gitlab # yum install -y git curl policycoreutils-python openssh-server # 安装依赖 # wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce…...

java基础(5)继承与多态
目录 编辑 1.前言 2.正文 2.1继承 2.1.1继承概念 2.1.2继承语法 2.1.3子类访问父类 2.1.4super关键字 2.2多态 2.2.1多态概念 2.2.2多态条件 2.2.3重写 2.2.4向上转型与向下转型 2.2.5为什么要使用多态 3.小结 1.前言 哈喽大家好啊,今天继续来为大…...

Flink消费Kafka实时写入Doris
本文模拟实际生产环境,通过FileBeat采集日志信息到Kafka,再通过Flink消费Kafka实时写入Doris。 文章目录 Filebeat采集日志到KafkaFlink消费Kafka实时写入Doris总结 Filebeat采集日志到Kafka 常见的日志采集工具有以下几种:Flume、Logstash和…...

实现Web QQ音乐打开现有新标签页切换音乐
若没有打开播放音乐标签页,则打开新标签页播放所选音乐如果已打开新标签页,则直接切换所选音乐 pageA.vue <script setup lang"ts"> const tab2 ref<any>(null); const router useRouter();interface Track {id: number;name: …...

从底层结构开始学习FPGA(15)----时钟结构(通俗版)
目录 0、前言 1、IO Bank和Clock Region(时钟区域)是一个东西吗? 2、时钟输入管脚 3、时钟架构 3.1、全局时钟BUFG 3.2、水平时钟BUFH 3.3、IO时钟BUFIO 3.4、区域时钟BUFR/BUFMR 4、总结 《从底层结构开始学习FPGA》目录与传送门 0、前言 我思来想去,总觉…...

MacOS Sublime Text 解决中乱码
1. 安装Package Control 官方安装指南 手动安装 通过以此点击菜单 Sublime Text > Preferences > Browse Packages 打开Packages目录找到Packages的同级目录Installed Packages下载PackageControl.sublime-package并保存到Installed Packages中在菜单 Sublime Text &g…...

Python画笔案例-084 绘制 3D立方体
1、绘制 3D立方体 通过 python 的turtle 库绘制 3D立方体,如下图: 2、实现代码 绘制 3D立方体,以下为实现代码: import turtle import timeviewfactor = 150 xshift = 0 yshift = 0 zshift = 50...

“八股文”面试:助力、阻力还是空谈?
在当今的IT行业,面试程序员时提及“八股文”已成为一种普遍现象。所谓“八股文”,通常指的是一系列固定的、标准化的面试问题及其解答,这些问题往往涵盖了计算机科学和软件工程的基础知识,以及一些流行的技术框架和算法。然而&…...

如何实现弹出式窗口
文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧,通常显示三个圆点图标,点击该图标…...

Lua 函数
Lua 函数 Lua 是一种轻量级的编程语言,广泛用于游戏开发、脚本编写和其他应用程序中。在 Lua 中,函数是一等公民,这意味着它们可以被存储在变量中,作为参数传递给其他函数,以及作为其他函数的返回值。本文将详细介绍 …...

HTML_文本标签
概念: 1、用于包裹:词汇、短语等。 2、通常写在排版标签里面。 3、排版标签更宏观(大段的文字),文本标签更微观(词汇、短语)。 4、文本标签通常都是行内元素。 常用的文本标签 标签名 全称 标签语义em Emphasized 加重(文本)。要着重阅…...

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...

健康睡眠的重要性
在快节奏的现代生活中,健康养生已成为人们日益关注的话题,而睡眠,这一看似平凡却至关重要的生理需求,往往被忽视在忙碌的缝隙中。今天,让我们深入探讨健康养生中的睡眠艺术,它不仅关乎身体的休息与恢复&…...

知道ip地址怎么看网络地址
在计算机网络的世界里,IP地址是设备之间通信的基础。然而,仅仅知道一个设备的IP地址并不足以完全理解它在网络中的位置和作用。网络地址,作为IP地址的一个重要组成部分,为我们提供了关于设备所属网络的更多信息。本文将深入探讨如…...

精心整理85道Java微服务面试题(含答案)
微服务 面试题 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3。微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片࿰…...

MongoDB聚合管道(Aggregation Pipeline)
聚合管道(Aggregation Pipeline)是MongoDB中用于对数据进行处理和分析的一种强大机制。它由一系列的阶段(Stage)组成,每个阶段对输入的数据进行一种特定的操作,然后将结果传递给下一个阶段,就像…...

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector(无习题)
C 中的 vector 容器详细总结 1. 什么是 vector? vector 是 C 标准模板库 (STL) 中的一种动态数组容器。它的底层实现是一个可以自动扩展的数组,支持随机访问和动态调整大小,是 C 中最常用的序列容器之一。vector 在插入、删除、遍历以及随机…...

SpringBoot技术支持的桂林景点导航
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...

利用vmware在移动硬盘安装Ubuntu2go
安装 买个移动硬盘,usb插电脑,磁盘管理看磁盘序列号 vmware新建虚拟机 这一步选择磁盘管理里面看到的磁盘4 先不要开机,选择设置里面UEFI 和安装正常Ubuntu一致操作即可,这里可以不选高级,默认一个引导分区&…...

Spring Boot:中小型医院网站的敏捷开发
摘 要 本基于Spring Boot的中小型医院网站设计目标是实现用户网络预约挂号的功能,同时提高医院管理效率,更好的为广大用户服务。 本文重点阐述了中小型医院网站的开发过程,以实际运用为开发背景,基于Spring Boot框架,运…...

241011-在jupyter中实现文件夹压缩后下载
241011-在jupyter中实现文件夹压缩后下载 在使用jupyter notebook过程中,我们经常会遇到成堆的文件无法批量下载的问题,这里提供压缩文件夹代码,压缩后即可右键文件选择download实现批量下载 import zipfile import os# 设置你想要压缩的文…...

.NET 一款用于转储指定进程内存的工具
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...

Splunk 修补关键漏洞,包括远程代码执行漏洞
领先的数据分析和安全监控平台 Splunk 发布了一系列安全更新,以解决 Splunk Enterprise 和 Splunk Cloud Platform 中的多个漏洞。这些漏洞的严重程度不一,有些可实现远程代码执行(RCE),有些则允许低权限用户访问敏感信…...

搭建一个vue3+vite框架
可以使用以下两种搭建方式 通过create-vue搭建vue3 项目(建议使用) create-vue create-vue 是 Vue.js 官方推荐的用于快速启动 Vite 驱动的 Vue 项目的脚手架工具。它简化了创建新 Vue 项目的过程,提供了预配置的项目结构,并集…...

【含文档】基于Springboot+Vue的公交管理系统(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...