第一章SpringBoot简介

news2024/11/28 12:55:32

文章目录

  • 什么是SpringBoot
      • 了解我们的Spring能干什么
        • Spring的生态
      • 为什么需要SpringBoot
        • SpringBoot优点
        • SpringBoot缺点
  • SpringBoot的大时代背景
      • 微服务
      • 分布式
        • 分布式的困难
        • 分布式的解决
      • 云原生
        • 上云的困难
  • SpringBoot之Helloworld
      • 新添我们的maven相关的配置
      • 创建一个maven项目并导入依赖
      • 创建主程序
      • 编写业务
      • 运行和测试
      • 设置配置
      • 打包部署

什么是SpringBoot

了解我们的Spring能干什么

image-20230210160306715

Spring的生态

覆盖了:

  • web开发
  • 数据访问
  • 安全控制
  • 分布式
  • 消息服务
  • 移动开发
  • 批处理

我们可以看出来我们的Spring的生态非常完善且强大,和它拥有IOC容器这个强大的功能,可以去整合其他框架

为什么需要SpringBoot

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.

能快速创建出生产级别的Spring应用。

Spring Boot是为了Spring框架的简易使用

众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是 Spring Boot。

  • 比如在我们的学习的SSM中,我们的SpringMVC配置中的DispatcherServlet,ViewResolver,开启MVC注解驱动,拦截器,文件上传器,视图控制,扫描组件,默认的Servlet,异常解析器,如果需要更多的功能,还需要更多的配置

Spring Framework 和 Spring Boot 的根本是一致的。Spring Boot 是 Spring Framework 的引导程序以简化其配置和使用。而Spring Framework 是 Spring Boot 的基础,Spring Boot 无法脱离 Spring Framework 。用户通过上层 Spring Boot 的引导来使用 Spring Framework 。

SpringBoot优点

  • Create stand-alone Spring applications

    • 创建独立Spring应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

    • 内嵌web服务器 比如嵌入式的TomCat
      • 比如我们之前使用Spring开发Web,还需要将我们的项目打成war包,然后放在我们本地的TomCat运行
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration

    • 自动starter依赖,简化构建配置 这里就解决了Spring配置地狱
      • 比如我们要进行Web开发,我们需要导入对应的jar包依赖,还需要控制版本,都是不能出错,不然无法运行,如果有了springboot,我们不需要导入一大堆依赖,只需要导入一个web对应的starter,就可以帮我们自动配置web需要的东西
  • Automatically configure Spring and 3rd party libraries whenever possible

    • 自动配置Spring以及第三方功能
      • 比如使用Mybatis,不需要再自己配置,什么数据源类似的配置
  • Provide production-ready features such as metrics, health checks, and externalized configuration

    • 提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration

    • 无代码生成、无需编写XML
  • SpringBoot是整合Spring技术栈的一站式框架

  • SpringBoot是简化Spring技术栈的快速开发脚手架

SpringBoot缺点

  • 人称版本帝,迭代快,需要时刻关注变化
  • 封装太深,内部原理复杂,不容易精通

SpringBoot的大时代背景

微服务

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.——James Lewis and Martin Fowler (2014)

  • 微服务是一种架构风格
  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级,运行到不同进程,也就是说可以放在不同的服务器
  • 服务之间使用轻量级HTTP交互
  • 服务围绕业务功能拆分
    • 根据业务。比如我们电商系统,可以将购物车,结账分为不同的模块,商品管理等等子系统

项目的逻辑构成
请求:请求是项目中最基本的逻辑单元,就像万事万物都由原子构成

  • 举例:点超链接跳转到注册页面

功能:一个功能包含很多个请求

  • 举例:注册用户功能

    • 请求1:点超链接跳转到注册页面

    • 请求2:发送请求获取短信验证码

    • 请求3:检查用户名是否可用

    • 请求4:提交表单完成注册

模块:一个模块包含很多功能

  • 举例:用户信息管理模块

    • 功能1:用户注册功能

    • 功能2:用户登录功能

    • 功能3:个人中心——账户安全功能

    • 功能4:个人中心——账户绑定功能

    • 功能5:个人中心——收货地址功能

    • 功能6:个人中心——我的银行卡功能

子系统:根据项目规模的不同,子系统这层逻辑概念可能有也可能没有。如果设置了子系统,那么子系统中也必然包含很多模块。其实庞大项目的子系统已经相当于一个项目了,甚至比小型项目整个都大。

  • 举例:认证中心子系统

    • 模块1:用户信息管理模块

    • 模块2:权限管理模块

    • 模块3:授权管理模块

    • 模块4:权限检查模块

项目:为了解决现实生活中的实际问题开发一个项目,这个项目就是为这个需求提供的一整套解决方案。

  • 举例:电商项目

    • 子系统1:认证中心子系统

    • 子系统2:商品管理子系统

    • 子系统3:购物车子系统

    • 子系统4:仓储子系统

    • 子系统5:物流子系统

    • 子系统6:订单子系统

  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

分布式

在这里插入图片描述

分布式的困难

  • 远程调用

    • 不同的子系统可能需要相互调用,比如购物车子系统需要调用仓储子系统,物理子系统,订单子系统
  • 服务发现

    • 可能几个主机都会有相同的子系统的功能,比如购物车子系统需要调用仓储子系统,仓储子系统在四台主机上都有,我们的购物车子系统需要哪些是可以使用的
  • 负载均衡

    • 可能几个主机都会有相同的子系统的功能,比如购物车子系统需要调用仓储子系统,仓储子系统在四台主机上都有,这四台主机都是可以使用的,我们的购物车子系统需要判断调用哪台主机的功能
  • 服务容错

    • 我们调用其他子系统失败,有可能是网络失败的原因,如果都不行,对应需要的处理方案
  • 配置管理

    • 因为很多一个子系统可能在很多主机都有,不可能让我们自己一个个去改,所以需要一个配置中心来让子系统自己主动修改
  • 服务监控

  • 链路追踪

    • 出现问题,要知道是哪个地方出现了问题
  • 日志管理

  • 任务调度

分布式的解决

  • SpringBoot + SpringCloud

在这里插入图片描述

云原生

原生应用如何上云。 Cloud Native

上云的困难

  • 服务自愈
  • 弹性伸缩
  • 服务隔离
  • 自动化部署
  • 灰度发布
  • 流量治理

SpringBoot之Helloworld

有更简单的创建方式,但是为了探究原理,我们采用原始的方式

新添我们的maven相关的配置

<mirrors>
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
</mirrors>

<profiles>
	<profile>
		<id>jdk-1.8</id>

		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>1.8</jdk>
		</activation>

		<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>
			<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
	</profile>
</profiles>
  • 第一个是为了让我们的maven下载速度更快
  • 第二个是为了让maven环境支持jdk1.8

创建一个maven项目并导入依赖

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.3.4.RELEASE</version>
</parent>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>
  • 第二个是为了导入我们的web开发需要的依赖

创建主程序

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class);
    }
}
  • @SpringBootApplication的作用是为了标识这是一个SpringBoot应用
  • SpringApplication.run(MainApplication.class)是为了让SpringBoot应用跑起来

image-20230214005556190

文件/目录 路径功能说明
src/main/java/Java 源码根目录
src/main/resources/application.propertis运行时配置文件
src/main/resources/其他运行时资源存放根目录
src/main/resources/static/静态资源存放根目录
src/main/resources/templates/模板资源存放根目录

编写业务

/**
 * @author lsc
 * #Description HelloWorldController
 * #Date: 2023/2/10 22:43
 */
@RestController
public class HelloWorldController {
    @RequestMapping("/hello")
    public String handle01(){
        return "Hello, Spring Boot 2!";
    }
}

运行和测试

  • 运行MainApplication
  • 浏览器输入http://localhost:8080/hello,将会输出Hello, Spring Boot 2!

image-20230210224543855

设置配置

maven工程的resource文件夹中创建application.properties文件。

# 设置端口号
server.port=8888

文档中查看相关的配置

更多配置信息

打包部署

在pom.xml添加

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

在IDEA的Maven插件上点击运行 clean 、package,把helloworld工程项目的打包成jar包,

打包好的jar包被生成在helloworld工程项目的target文件夹内。

用cmd运行java -jar boot-01-helloworld-1.0-SNAPSHOT.jar,既可以运行helloworld工程项目。将jar包直接在目标服务器执行即可。

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

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

相关文章

Seata-Server分布式事务原理加源码(二) - 分布式事务解决方案

分布式事务解决方案 2PC即两阶段提交协议&#xff0c;是将整个事务流程分为两个阶段&#xff0c;P是指准备阶段&#xff0c;C是指提交阶段。 准备阶段&#xff08;Prepare phase&#xff09;提交阶段&#xff08;commit phase&#xff09; 举例&#xff1a;比如说相亲对象两…

微服务项目【秒杀商品展示及商品秒杀】

登录方式调整 第1步&#xff1a;从zmall-common的pom.xml中移除spring-session-data-redis依赖 注意&#xff1a; 1&#xff09;本次不采用spring-session方式&#xff0c;改用redis直接存储用户登录信息&#xff0c;主要是为了方便之后的jmeter压测&#xff1b; 2&#xff09…

魔兽世界WOW私服架设详细教程

1. 写在前面&#xff1a;此教程是针对国服WOW3.3.5.13930版本的&#xff0c;因为目前魔兽单机在此版本下运行最正常。WOW4.0以上版本还有些许问题2. 准备文件&#xff08;1&#xff09;WOW3.3.5.13930客户端&#xff0c;没有的可以从这里下载WOW 3.3.2安装文件和WOW3.3.2-3.3.5…

【linux C】daemon函数应用之——进程守护小工具,运维仔看了都说好!并附带shell版本

最近接触到Linux C中的daemon函数&#xff0c;顾名思义&#xff0c;它和守护进程Daemon有关&#xff1b;简单来说Linux Daemon&#xff08;守护进程&#xff09;是运行在后台的一种特殊进程&#xff1b; 一般来说&#xff0c;它独立于控制终端并且周期性地执行某种任务或等待处…

认识V模型、W模型、H模型

软件测试与软件工程息息相关&#xff0c;软件测试是软件工程组成中不可或缺的一部分。 在软件工程、项目管理、质量管理得到规范化应用的企业&#xff0c;软件测试也会进行得比较顺利&#xff0c;软件测试发挥的价值也会更大。 要关注软件工程、质量管理以及配置管理与软件测试…

ChatGPT中文网尝鲜,感觉自己快下岗了

最近很火的ChatGPT之初体验 ChatGPT中文网 居然可以回答代码问题 尝试了一下, 它居然说自己是一个人 顺便问了下简单的java代码问题 “使用java语言写一个递归打印D盘中所有文件名的程序” 很流畅的回答了出来,注释还写得比我详细,感觉我离下岗不远了 这就是GPT写的代码 i…

工人不戴安全帽自动检测识别 opencv

工人不戴安全帽自动检测识别通过pythonopencv深度学习网络模型&#xff0c;工人不戴安全帽自动检测识别算法对现场人员穿戴进行全天候不间断识别检测&#xff0c;发现现场人员违规行为着装自动抓拍存档。Python是一门解释性脚本语言。解释性语言&#xff1a;解释型语言&#xf…

C语言中大小端问题

目录 一、什么是大小端 二、 举个例子 三、大小端演示 四、解释"二"中举例的问题 ​五、怎么判断是大端还是小端 六、一个题目 一、什么是大小端 大端模式&#xff08;大端字节序存储&#xff09;&#xff1a;就是高位字节数据存放在内存的低地址端&#xff…

工序排序问题--约翰逊法精讲

什么是约翰逊法?约翰逊法是作业排序中的一种排序方法。选出最短加工时间i*&#xff0c;若最短加工时间有多个&#xff0c;任选1个.若i*出现在机床1&#xff0c;它对应的工件先安排加工&#xff0c;否则放在最后安排&#xff0c;安排后划去该工件,重复上两个步骤&#xff0c;直…

python3.11下载安装详细教程

python3.11新的功能特性 1. 支持新的字符串格式化功能&#xff0c;允许使用更多的格式化选项&#xff1b; 2. 支持新的数据类型&#xff0c;如结构化数据类型&#xff1b; 3. 支持新的编程模型&#xff0c;如asyncio&#xff1b; 4. 支持新的编程语言特性&#xff0c;如f-s…

别在用scroll去做懒加载了,交叉观察器轻松搞定

Ⅰ、前言 「懒加载」是网页中非常 常见的&#xff1b;为了减少系统的压力&#xff0c;对于一些电商系统出场频率非常高&#xff1b;那么大家一般用什么方式去实现 「懒加载」 呢 &#xff1f; ① 通过 scroll 的形式&#xff1a; 通过 滚动「scroll」事件&#xff0c;然后去判…

浅析 Makefile

Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行&#xff0c;构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中&#xff0c;target表示要生…

Thinking--FastDom消除浏览器布局抖动

Thinking系列&#xff0c;旨在利用10分钟的时间传达一种可落地的编程思想。 对于大量操作 DOM 的场景&#xff0c;页面时常会出现卡顿现象&#xff0c;导致用户体验不佳。卡顿的原因是由于掉帧导致&#xff01;&#xff01; 掉帧 现在屏幕大部分的固定刷新频率为60Hz&#xf…

30个HTML+CSS前端开发案例(完结篇)

30个HTMLCSS前端开发案例&#xff08;完结篇&#xff09;flex弹性布局-今日头条首页热门视频栏代码实现效果flex弹性布局-微博热搜榜单代码实现效果grid网格布局-360图片展示代码实现效果综合实例-小米商城左侧二级菜单代码实现效果资源包flex弹性布局-今日头条首页热门视频栏 …

Pinia快速入门

Pinia学习1.做什么用的❓2.优势❓3. 介绍❓3.1、与vuex对比与 Vuex 3.x/4.x 的比较#4.实操使用&#x1f4aa;版本须知4.1创建项目4.2运行项目4.3使用pinia安装全局引入挂载使用stategettersactions示例代码分析1.做什么用的❓ 与vuex的作用一致&#xff0c;用于做网页存储的Pin…

【STC15单片机】模拟I2C操作AT24C02数据读取【更新中】

目录 I2C时序结构 I2C代码 AT24C02代码&#xff08;继承I2C底层代码&#xff09; PCF8591 PCB上线的长短可能影响数据传输的时间&#xff0c;写I2C时序可能就要加一点延时 I2C时序结构 起始条件&#xff1a;SCL高电平期间&#xff0c;SDA从高电平切换到低电平终止条件&…

什么蓝牙耳机好用性价比高?性价比最高的蓝牙耳机品牌排行

无线耳机迅速成为了电子产品中的佼佼者&#xff0c;无论是日常通勤、办公或是休闲、娱乐&#xff0c;几乎都能看到戴耳机听音乐的人&#xff0c;细心的朋友应该能够发现&#xff0c;蓝牙耳机在这几年有了很大的进步&#xff0c;下面我就分享几款当前性价比最高的蓝牙耳机。 TO…

T38,数的递归

描述 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是一棵空…

分账系统逻辑

一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景&#xff1a; 在分销业务中&#xff0c;主营商户收到用户购买分销商品所支付的款项后&#xff0c;可以通过分账逻辑&#xff0c;与分销商进行佣金结算。在零售、餐饮等行业中&#xff0c;当销售人员完零售等…

小樽 C++指针—— (壹) 指针变量

(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华&#xff0c;但李华不在家&#xff0c;于是把书放到书架第3层的最右边…