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

Spring Boot介绍、入门案例、环境准备、POM文件解读

文章目录

    • 1.Spring Boot(脚手架)
    • 2.微服务
    • 3.环境准备
      • 3.1创建SpringBoot项目
      • 3.2导入SpringBoot相关依赖
      • 3.3编写一个主程序;启动Spring Boot应用
      • 3.4编写相关的Controller、Service
      • 3.5运行主程序测试
      • 3.6简化部署
    • 4.Hello World探究
      • 4.1POM文件
        • 4.1.1父项目
        • 4.1.2父项目的父项目
        • 4.1.3启动器


1.Spring Boot(脚手架)

Spring Boot是简化Spring应用开发的一个框架,整个Spring技术栈的一个大整合,J2EE开发的一站式解决方案

Spring Boot的优点:

  • 快速创建独立运行的spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器,应用无需打成war包,内嵌Tomcat
  • Starters自动依赖和版本控制
  • 大量的自动装配,简化开发,也可以修改默认值
  • 无需配置XML无代码生成开箱即用
  • 准生产环境的运行时应用监控
  • 与云计算的天然集成

2.微服务

Spring Cloud微服务治理方案

​ 2014年,Martin Fowler 和 James Lewis 发表了一篇重要的文章:《Microservices - a definition of this new architectural term》。在这篇文章中,他们提出了微服务架构的基本概念。

从传统的单体应用到微服务架构,经历了以下演变:

  1. 单体架构(Servlet/SSM):最早的架构模式,适用于简单应用。
  2. SOA:拆分服务以提高重用性和灵活性,但存在集成和性能的挑战。
  3. 微服务(Spring Cloud):将服务进一步细化,追求每个服务的自治性和独立性,解决了 SOA 中的复杂性问题。

微服务:架构风格(服务微化)

  • 微服务是指开发单个小型的但有业务功能的服务,每个服务都有自己处理和轻量通讯机制,可以部署在单个或多个服务器上。微服务也指一种种松耦合的有一定的有界上下文的面向服务架构。
  • 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
  • 单体应用:ALL IN ONE
  • 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;

微服务文档https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa

微服务优点:

  • 每一个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。
  • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
  • 微服务是松耦合的,是有功能意义的服务,无论是开发阶段或是部署阶段都是独立的。
  • 微服务能够使用不同的语言开发。
  • 微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,一个团队的新成员能够更快投入生产。
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,
  • 微服务能够即时被要求扩展。
  • 微服务能够部署中低端配置的服务。
  • 易于和第三方集成。
  • 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库。

微服务缺点:

  • 微服务架构可能带来过多的操作
  • 可能双倍的努力
  • 分布式系统可能复杂难以管理
  • 因为分布部署跟踪问题难
  • 当服务量增加,管理复杂性增加

3.环境准备

环境约束

jdk 1.8,maven 4.5.6,IDEA2017,SpringBoot 2.5.6

3.1创建SpringBoot项目

省略,可以查看SpringBoot项目的创建方式-CSDN博客

3.2导入SpringBoot相关依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies>

3.3编写一个主程序;启动Spring Boot应用

注意要将主程序放入三级根目录下

image-20241227135619248

/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class SpringBoot01Application {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(SpringBoot01Application.class,args);}
}

3.4编写相关的Controller、Service

@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello(){return "Hello World!";}
}

3.5运行主程序测试

image-20241227135744762

image-20241227135904445

使用浏览器访问,8080为未设置的默认端口号

image-20241227135951594

不需要如SSM项目配置Tomcat就可以访问网页,因为SpringBoot中内嵌了Tomcat,会根据导入SpringBoot的版本自动匹配Tomcat版本

image-20241227140232816

3.6简化部署

在pom.xml添加下面这个插件

<!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

将这个项目进行打包

image-20241227140440294

java -jar 包名

image-20241227141150419

当命令窗口关闭后,则不能访问

4.Hello World探究

4.1POM文件

4.1.1父项目
	<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- lookup parent from repository --></parent>

作用spring-boot-starter-parent 是 Spring Boot 官方提供的一个父级 POM(项目对象模型)文件,它是一个专为 Spring Boot 项目定制的父 POM。它为你的 Spring Boot 项目提供了一些默认的配置,包括插件版本、依赖项管理和一些常见的构建配置。

功能

  • 继承此父 POM,Maven 会自动为项目配置很多常见的插件和默认依赖项。
  • 提供合理的默认配置,简化项目设置,开发者无需单独配置构建插件(如 maven-compiler-pluginmaven-spring-boot-plugin 等)。
  • 集成 Spring Boot 所需的特定插件和依赖项,使构建和打包过程更加顺畅。
  • relativePath 是空的,意味着从 Maven 仓库中查找父 POM,而不是相对路径(用于特殊情况)。
4.1.2父项目的父项目

他来真正管理Spring Boot应用里面的所有依赖版本;是Spring Boot的版本仲裁中心;

以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.6</version></parent>

作用spring-boot-dependencies 是 Spring Boot 的依赖管理 BOM(Bill Of Materials)文件。它用于统一管理所有 Spring Boot 项目的依赖版本,确保依赖库的版本兼容性。它并不直接提供插件或构建配置,而是为项目提供了一个集中式的依赖管理。

功能

  • 通过引入 spring-boot-dependencies,你无需手动指定 Spring Boot 项目所需的依赖版本号,父 POM 会自动为你管理这些版本。
  • 它帮助统一管理 Spring 相关库的版本,避免了版本冲突或不兼容的情况。
  • 它并不会直接引入所有的依赖,而是提供一个依赖版本的推荐集合,可以通过 <dependencyManagement> 来进行声明,从而控制项目中的依赖版本。
4.1.3启动器
		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

spring-boot-starter-web

spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter

相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

相关文章:

Spring Boot介绍、入门案例、环境准备、POM文件解读

文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序&#xff1b;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…...

基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线商品竞拍管理系统是一种现代化的前后端分离架构的应用程序&#xff0c;它结合了Java后端框架Spring Boot和JavaScript前端框架Vue.js的最新版本&#xff08;Vue 3&#xff09;。该系统允许用户在线参与商品竞拍&#xff0c;并提供管理后台…...

LeetCode--排序算法(堆排序、归并排序、快速排序)

排序算法 归并排序算法思路代码时间复杂度 堆排序什么是堆&#xff1f;如何维护堆&#xff1f;如何建堆&#xff1f;堆排序时间复杂度 快速排序算法思想代码时间复杂度 归并排序 算法思路 归并排序算法有两个基本的操作&#xff0c;一个是分&#xff0c;也就是把原数组划分成…...

华诺星空 Java 开发工程师笔试题 - 解析

单选题 1.Math.round(-11.5)等于多少?(B) A.-11.5 B.-11 C.-12 D.11.5 2.下列哪个没有继承自Collection接口。( C ) A.List B.Set C.Map D.全部 3.下列说法正确的有(B) A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法时可直接调用 C.在类…...

QT:一个TCP客户端自动连接的测试模型

版本 1:没有取消按钮 测试效果&#xff1a; 缺陷&#xff1a; 无法手动停止 测试代码 CMakeLists.txt cmake_minimum_required(VERSION 3.19) project(AutoConnect LANGUAGES CXX)find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets Network)qt_standard_project_setup(…...

关于启动vue项目,出现:Error [ERR_MODULE_NOT_FOUND]: Cannot find module ‘xxx‘此类错误

目录 一、问题报错 二、原因分析 三、解决方法 一、问题报错 node环境变量配置有问题&#xff1a; (base) xxxM73H-15:~/VueProject/pproject-vue$ npm run dev /usr/bin/env: “node”: 没有那个文件或目录vue项目启动有问题&#xff1a; (base) xxx:~/VueProject/pproj…...

电路元件与电路基本定理

电流、电压和电功率 电流 1 定义&#xff1a; 带电质点的有序运动形成电流 。 单位时间内通过导体横截面的电量定义为电流强度&#xff0c; 简称电流&#xff0c;用符号 i 表示&#xff0c;其数学表达式为&#xff1a;&#xff08;i单位&#xff1a;安培&#xff08;A&#x…...

指针之矢:C 语言内存幽境的精准飞梭

一、内存和编码 指针理解的2个要点&#xff1a; 指针是内存中一个最小单元的编号&#xff0c;也就是地址平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用来存放内存地址的变量 总结&#xff1a;指针就是地址&#xff0c;口语中说的指针通常指的是指针变量。…...

uniapp下载打开实现方案,支持安卓ios和h5,下载文件到指定目录,安卓文件管理内可查看到

uniapp下载&打开实现方案&#xff0c;支持安卓ios和h5 Android&#xff1a; 1、申请本地存储读写权限 2、创建文件夹&#xff08;文件夹不存在即创建&#xff09; 3、下载文件 ios&#xff1a; 1、下载文件 2、保存到本地&#xff0c;需要打开文件点击储存 使用方法&…...

免费干净!付费软件的平替款!

今天给大家介绍一个非常好用的电脑录屏软件&#xff0c;完全没有广告界面&#xff0c;非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装&#xff0c;打开就能看到界面直接使用了。 软件可以全屏录制&#xff0c;也可以自定义尺寸进行录制。 录制的声音选择也非…...

软路由系统 iStoreOS 中部署 Minecraft 服务器

商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。协议(License): 知识共享署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)作者(Author): lhDream链接(URL): https://blog.luhua.site/archives/1734968846131 软路由系统 iStoreOS 中部署 Minecraft…...

第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

前言 本文介绍了 ES 使用的网络模型&#xff0c;并介绍 transport&#xff0c;http 接收、响应请求的代码入口。 网络 IO 模型 Node 在初始化的时候&#xff0c;会创建网络模块。网络模块会加载 Netty4Plugin plugin。 而后由 Netty4Plugin 创建对应的 transports&#xff0…...

细说STM32F407单片机IIC总线基础知识

目录 一、 I2C总线结构 1、I2C总线的特点 2、I2C总线通信协议 3、 STM32F407的I2C接口 二、 I2C的HAL驱动程序 1、 I2C接口的初始化 2、阻塞式数据传输 &#xff08;1&#xff09;函数HAL_I2C_IsDeviceReady() &#xff08;2&#xff09;主设备发送和接收数据 &#…...

从头开始学MyBatis—04缓存、逆向工程、分页插件

介绍了MyBatis的缓存、逆向工程和分页插件的使用 目录 1.Mybatis的缓存 1.1MyBatis的一级缓存 1.2MyBatis的二级缓存 1.3二级缓存的相关配置 1.4MyBatis缓存查询的顺序 1.5整合第三方缓存EHCache 1.5.1添加依赖 1.5.2各jar包功能 1.5.3创建EHCache的配置文件ehcache.x…...

Artec Space Spider助力剑桥研究团队解码古代社会合作【沪敖3D】

挑战&#xff1a;考古学家需要一种安全的方法来呈现新出土的陶瓷容器&#xff0c;对比文物形状。 解决方案&#xff1a;Artec Space Spider, Artec Studio 效果&#xff1a;本项目是REVERSEACTION项目的一部分&#xff0c;旨在研究无国家社会中复杂的古代技术。研究团队在考古地…...

《探索PyTorch计算机视觉:原理、应用与实践》

《探索PyTorch计算机视觉&#xff1a;原理、应用与实践》 一、PyTorch 与计算机视觉的奇妙相遇二、核心概念解析&#xff08;一&#xff09;张量&#xff1a;计算机视觉的数据基石&#xff08;二&#xff09;神经网络&#xff1a;视觉任务的智慧大脑&#xff08;三&#xff09;…...

【C#设计模式(21)——状态模式(State Pattern)】

前言 状态模式:在对象内部发生改变时改变其行为&#xff0c;使得对象在不同的状态下具有不同的行为表现。 代码 #region 状态模式-类/// 抽象 交通灯状态public abstract class TrafficLightState{public abstract void Display();}//红灯public class RedLight : TrafficLight…...

nvm日常使用中常用命令总结

日常开发vue项目中&#xff0c;不同的项目 我们可能需要安装不同的node版本&#xff0c;但是为了方便切换node&#xff0c;我们一般会安装一个名称为nvm的工具&#xff0c;这里总结一下&#xff0c;nvm常用的命令&#xff1a; 1、为了查看可用的 Node.js 版本&#xff0c;你可…...

【数据仓库】SparkSQL数仓实践

文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能&#xff0c;只有sql 到RDD的解释翻译功能&#xff0c;所以需要和hive的metastore服务集成在一起使用。 集成hive metastore 在spark安…...

PessimisticLock

想象你和你的朋友都想去图书馆借同一本非常受欢迎的小说。为了确保你们中的一位能够成功借到这本书&#xff0c;图书馆采用了悲观锁机制来管理借阅过程。 悲观锁的方式 查看书籍状态&#xff1a;当你到达图书馆并决定要借这本小说时&#xff0c;你先告诉图书管理员你想借这本…...

OpenClaw技能扩展:基于nanobot实现Markdown自动转换

OpenClaw技能扩展&#xff1a;基于nanobot实现Markdown自动转换 1. 为什么需要文档自动化转换 在日常工作中&#xff0c;我们经常需要处理各种格式的文档——Word、PDF、PPT、Excel甚至网页内容。手动将这些文档转换为Markdown格式不仅耗时&#xff0c;还容易出错。作为一名技…...

GetQzonehistory:终极QQ空间说说备份完整指南

GetQzonehistory&#xff1a;终极QQ空间说说备份完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆时代&#xff0c;QQ空间承载了无数人的青春回忆。那些年发的说说、分…...

解密ARM多核调度:从Linux内核源码看SMP负载均衡如何玩转Cortex-A系列

ARM多核调度实战&#xff1a;从Linux内核视角剖析SMP负载均衡的艺术 在移动计算和嵌入式系统领域&#xff0c;ARM架构凭借其出色的能效比已经占据了主导地位。随着Cortex-A系列处理器核心数量的不断增加&#xff0c;如何高效地管理这些计算资源成为系统性能优化的关键。本文将带…...

EEGLAB进阶实战:从原始EEG到ERP成分的精准提取与可视化分析

1. EEGLAB入门&#xff1a;理解ERP分析的核心流程 第一次接触EEGLAB时&#xff0c;我被它强大的功能和复杂的界面弄得晕头转向。经过多次实战&#xff0c;我发现理解ERP分析的完整流程是关键。就像做菜需要先备料再烹饪一样&#xff0c;EEG数据处理也需要遵循特定步骤。 原始EE…...

HG-ha/MTools行业实践:短视频工作室AI配音+自动字幕+封面图生成闭环

HG-ha/MTools行业实践&#xff1a;短视频工作室AI配音自动字幕封面图生成闭环 你是不是也遇到过这样的场景&#xff1f;作为短视频工作室的创作者&#xff0c;每天都要面对海量的视频素材。一条1分钟的视频&#xff0c;从剪辑、配音、加字幕到制作封面&#xff0c;前前后后可能…...

springboot-vue基于web的智慧校园学生信息管理平台设计和实现

目录技术栈选择系统模块划分开发流程规划关键代码示例&#xff08;后端&#xff09;部署方案扩展性考虑注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Spring Boot框架&#xff0c;提供RESTful AP…...

【shell】shell实现交互式输入与超时处理

1. Shell脚本交互式输入基础 在Shell脚本编程中&#xff0c;交互式输入是最基础也最常用的功能之一。想象一下这样的场景&#xff1a;你写了一个自动安装软件的脚本&#xff0c;需要用户确认是否继续&#xff1b;或者开发了一个配置工具&#xff0c;需要用户输入IP地址和端口号…...

Umi-OCR:彻底解决你的文字识别难题,这3大功能让你效率翻倍!

Umi-OCR&#xff1a;彻底解决你的文字识别难题&#xff0c;这3大功能让你效率翻倍&#xff01; 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址…...

如何快速解锁网易云音乐NCM格式:免费无损转换完整指南

如何快速解锁网易云音乐NCM格式&#xff1a;免费无损转换完整指南 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾经从网易云音乐下载了喜爱的歌曲&#xff0c;却发现这些NCM格式文件无法在其他…...

RNA-seq测序深度指南:从研究目的到数据量换算全解析

1. RNA-seq测序深度&#xff1a;为什么它如此重要&#xff1f; 做RNA-seq实验的朋友们&#xff0c;最常被问到的问题就是"该测多少数据量&#xff1f;"。这个问题看似简单&#xff0c;实际上直接关系到实验的成败。我见过太多人因为测序深度选择不当&#xff0c;导致…...