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

news2024/12/28 6:05:59

文章目录

    • 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源框架】从零到一:AutoGen Studio开源框架-UI层环境安装与智能体操作全攻略

一、什么是AutoGen AutoGen是微软推出的一款工具&#xff0c;旨在帮助开发者轻松创建基于大语言模型的复杂应用程序。在传统上&#xff0c;开发者需要具备设计、实施和优化工作流程的专业知识&#xff0c;而AutoGen则通过自动化这些流程&#xff0c;简化了搭建和优化的过程。 …

【论文阅读】MedCLIP: Contrastive Learning from Unpaired Medical Images and Text

【论文阅读】MedCLIP: Contrastive Learning from Unpaired Medical Images and Text 1.论文背景与动机2.MedCLIP的贡献3.提出的方法4.构建语义相似矩阵的过程5. 实验6. 结论与局限性 论文地址&#xff1a; pdf github地址&#xff1a;项目地址 Zifeng Wang, Zhenbang Wu, Di…

雷电模拟器安装Lxposed

雷电模拟器最新版支持Lxposed。记录一下安装过程 首先到官网下载并安装最新版&#xff0c;我安装的时候最新版是9.1.34.0&#xff0c;64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的&#xff0c;号称适配安卓7以上所有机型&#x…

全解:Redis RDB持久化和AOF持久化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)

目录 引言1. 下载2. 安装 VMware2. 安装银河麒麟操作系统2.1 新建虚拟机2.2 安装操作系统2.3 网络配置 3. 安装VMTools 创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄袭…

HTML5实现喜庆的新年快乐网页源码

HTML5实现喜庆的新年快乐网页源码 前言一、设计来源1.1 主界面1.2 关于新年界面1.3 新年庆祝活动界面1.4 新年活动组织界面1.5 新年祝福订阅界面1.6 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现喜庆的新年快乐网页源码&#xff0c;春节新年网…

5G学习笔记之Non-Public Network

目录 0. NPN系列 1. 概述 2. SNPN 2.1 SNPN概述 2.2 SNPN架构 2.3 SNPN部署 2.3.1 完全独立 2.3.2 共享PLMN基站 2.3.3 共享PLMN基站和PLMN频谱 3. PNI-NPN 3.1 PNI-NPN概述 3.2 PNI-NPN部署 3.2.1 UPF独立 3.2.2 完全共享 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】S…

大语言模型(LLM)中大数据的压缩存储及其重要性

在大型语言模型&#xff08;LLM&#xff09;中&#xff0c;KV Cache&#xff08;键值缓存&#xff09;的压缩方法及其重要性。 为什么要压缩KV Cache&#xff1f; 计算效率&#xff1a;在生成文本的过程中&#xff0c;每个生成的token都需要与之前所有的token的键值&#xff…

canvas之进度条

canvas之进度条 效果&#xff1a; 封装的组件 <template><div class"circle" :style"{ width: props.radius px, height: props.radius px }"><div class"circle-bg" :style"{ width: props.radius - 5 px, height: pr…

Boost之log日志使用

不讲理论&#xff0c;直接上在程序中可用代码&#xff1a; 一、引入Boost模块 开发环境&#xff1a;Visual Studio 2017 Boost库版本&#xff1a;1.68.0 安装方式&#xff1a;Nuget 安装命令&#xff1a; #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

18.springcloud_openfeign之扩展组件二

文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定 对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持MatrixVariablePathVariableRequestParamRequestHeaderSpringQueryMapRequestPartCookieValue FormattingConversi…

7-8 N皇后问题

目录 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 解题思路&#xff1a; 详细代码&#xff08;dfs&#xff09;&#xff1a; 简单代码&#xff08;打表&#xff09;&#xff1a; 题目描述 在NN格的国际象棋盘上摆放N个皇后&#xff0c;使其不能互相攻击&#xff0c;即任…

现代网络负载均衡与代理导论

大家觉得有有参考意义和帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; Service mesh 是近两年网络、容器编排和微服务领域最火热的话题之一。Envoy 是目前 service mesh 数据平面的首选组件。Matt Klein 是 Envoy 的设计者和核心开发。 文章循序渐进&#xff0…

Kubernetes Gateway API-2-跨命名空间路由

1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…

Wend看源码-Java-集合学习(List)

摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构&#xff1a;List、Set和Queue。本文将详细阐述这些数据类型的各自实现&#xff0c;并按照线程安全性进行分类&#xff0c;分别介绍非线程安全与线程安全的实现方…

集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!

本文将详细介绍 Docusign 与蓝凌 EKP 的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 在当今数字化办公环境中&#xff0c;企业对于提高工作效率和提升用户体验的需求日益迫切。蓝凌…

突围边缘:OpenAI开源实时嵌入式API,AI触角延伸至微观世界

当OpenAI宣布开源其名为openai-realtime-embedded-sdk的实时嵌入式API时&#xff0c;整个科技界都为之震惊。这一举动意味着&#xff0c;曾经遥不可及的强大AI能力&#xff0c;如今可以被嵌入到像ESP32这样的微型控制器中&#xff0c;真正地将AI的触角延伸到了物联网和边缘计算…

webrtc-internals调试工具

Google 的 Chrome&#xff08;87 或更高版本&#xff09;WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…

使用Webpack构建微前端应用

英文社区对 Webpack Module Federation 的响应非常热烈&#xff0c;甚至被誉为“A game-changer in JavaScript architecture”&#xff0c;相对而言国内对此热度并不高&#xff0c;这一方面是因为 MF 强依赖于 Webpack5&#xff0c;升级成本有点高&#xff1b;另一方面是国内已…

[bug]java导出csv用Microsoft Office Excel打开乱码解决

[bug]java导出csv用Microsoft Office Excel打开乱码 ‍ 现象 首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的, 但是使用者是Windows系统,他的电脑没有"Numbers表格"工具, ​​ 他用Microsoft Office Excel打开之后出现乱码,如下图…