一、入门
(1).SpringBoot简介
说明: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化
Spring应用的初始搭建
以及开发过程
优点:①:依赖设置繁琐 ②:配置繁琐
缺点:
①:起步依赖(简化依赖配置)
使用ssm框架
的时候,经常容易发生依赖冲突
,导致很多问题非常难以排除。需要手动更改以来版本。
使用springboot
,它能够自动使用最合适的版本
,不同的版本的springboot依赖也会自动给你配置不同版本的其他依赖(druid、mybatis、mysql…)
②:自动配置(简化常用工程相关配置)
③:辅助功能(内置服务器tomcat,…)
(2).SpringBoot核心特色
①:parent
parent是所有SpringBoot项目要继承的项目,它定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
②:starter
starter是SpringBoot中常见项目名称,它定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的。
start的依赖当中其实存放着一系列相关的依赖,相互之间依赖传递,最终写道pom.xml时只需要添加极少的依赖,相当简便。
③:引导类
SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目。SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean。引导类的功能主要是靠@SpringBootApplication
这个注解来实现的。
④:内置服务器
以往使用tomcat需要安装tomcat打包放进去启动tomcat,或者在IDEA配置tomcat设置好路径,选择war包,才能运行。而在springboot中,你可以直接在依赖中配置,不想用就换。不需要以往那么繁琐
2.REST风格
(1).REST简介
有别于传统get与post在url路径中显示业务的内容,REST风格简化了书写
什么叫做约定呢? 虽然公司说post方法就是用来添加用户信息,但是如果你想用get添加用户信息也可以!上图中对应的方法业务只是一个建议!
如何选择我想使用的方法呢?
在@RequestMapping中,多添加一个属性:@RequestMapping(value = "/users", method = RequestMethod.DELETE)
以此来限定你可以使用的方法,就变成每个方法针对一个业务了!
如此一来,以往ssm项目中使用url后缀作为映射方法的核心,已经变成了使用方法来影响映射处理器方法
(2).形参区别
3.基础配置
(1).复制工程
①: 在工作空间中复制对应工程,并修改工程名称
②: 删除与Idea相关配置文件,仅保留src目录与pom.xm1文件
③: 修改pom.xm1文件中的artifactId与新工程/模块名相同
④: 删除name标签(可选
⑤: 保留备份工程供后期使用
(2).属性配置
SpringBoot提供了三种属性配置的方式:
yml为主流的配置格式
(3).调用yml中配置内容
4.整合第三方技术
(1).整合JUnit
①: 测试类如果存在于引导类所在包或子包中无需指定引导类
②: 测试类如果不存在于引导类所在的包或子包中需要通过classes属
性指定引导类
(2).整合MyBatis
依赖名为:
*-spring-boot-starter
是第三方的,spring-boot-starter- *
是官方的
(3).整合第三方技术
区别于SSM中数据源繁琐的配置,只需要在yml文件中输入数据源信息即可
(4).整合MyBatis-Plus
导入依赖、继承BaseMapper<实体类>、具体可以去看另一篇博客
1、mp是根据实体类Book按驼峰原则去数据库下找同名的表book
2、如果表名跟实体类不一致有两种解决方法
3、第一种是设置@TableName注解指定表名
4、第二种方法设置前缀,相对来说简化一点,如果表很多的话就用这个
(5).整合Druid
5.SSMP整合💢
(1).案例分析
①:实体类开发 - @Lombok
②:Dao开发 - 整合MyBatis Plus,制作数据层测试
③:Service开发 - 基于MyBatis Plus增量开发,制作业务层测试
④:Controller开发 - 基于Restful开发,使用PostMan测试接口功能
⑤:Controller开发 - 前后端开发协议制作
⑥:页面开发 - 基于VUE + ElementUI制作,前后端联调,页面数据处理,页面消息处理 CRUD
⑦:项目异常处理
⑧:按条件查询 - 页面功能调整、Controller修正功能、Service修正功能
6.运维篇
(1).Springboot项目快速启动(Windows版)
window在jar包文件下使用命令行指令直接启动jar包就ok
项目启动的时候端口会被占用,为了避免出现端口占用还找不到是哪个程序的时候
(2).Springboot项目快速启动(Linux版)
通常我们会在 ~ home目录
或者 usr/local/ 在该目录下新建一个 app
来上传自己的jar包
**确保自己安装了linux的 JDK
**
此时访问192.168.5.128
会发现项目并没有读取到数据,原因是因为你在idea当中配置的数据源使用的是localhost,需要改成linux的ip地址
那我们该怎么做呢?去修改linux当中包里的数据源配置吗?不对,我们可以使用navicat将项目所需要的表发送到linux中。
我们使用navicat连接上linux的mysql,将原来Windows中使用的表转储
。
将转出出来的数据,复制起来,到与linux连接的数据库的表当中,创建一个查询,然后把语句复制进去
全选运行,这样我们就等于把原来的表转移到linux当中了,此时linux就可以自动辨别出该表。部署的项目也可以正常运行了
(3).linux部署进阶
项目部署也确实能用了,但是实际开发是不会这么部署的。因为此时finalshell界面无法操作我们的项目就只能这样被锁住了,你无法进行操作。 因此我们可以开启后台模式
:
我们该如何关闭项目呢?
由于后台模式不属于一个界面中运行的程序,所以我们需要通过查找程序pid来杀程序
(4).项目临时配置
比如当你的端口被某个程序占用时,项目会被修改临时属性,部署上去
我们也可以删除掉默认的第二个参数 args,这样操作可以提高项目安全性,不会传入外部参数
临时配置文件会覆盖其他的配置文件。配置文件之间也会自动填补对方没有的,一起使用
💢配置优先级:
①: jar包同级目录中创建config文件,在该config文件中再创建application.yml临时文件
②: jar包同级目录中创建application.yml临时文件
③: 项目中resource目录中创建config文件,在该config文件中再创建application.yml临时文件
④: 项目中resource目录中创建application.yml临时文件
顺带提一下三种配置文件的优先级: properties-yaml-yml
(5).多环境开发
快捷笔记
针对不同的环境,我们可以使用 — 来分割 跟md的分割线一样,最终在应用环境当中选择自己要使用的配置
可以看到profiles已经是过时的方法了,
不过实际上前面讲的配置方式都没什么用、工作中配置基本都是下面这种
下方写法前提是goup当中的文件必须是存在的,命名格式为: application-devxxx.yml如此
(6).通用配置容易出现的问题
当 maven 与 springboot 同时对多环境进行控制的时候,以maven为主
(7).日志
推荐采用组设置的日志级别,当包多的时候太繁琐。
(1).微服务
① 说明: 它是一种架构模式
,它将传统的一站式应用(框架开发的传统 Web 应用)
拆分成多个独立的服务,每个服务都负责单独的业务功能。这些服务可以独立部署和扩展,并且通过轻量级的通信机制互相协作。
② 举个栗子: 网购在微服务架构中,通过网站或者移动端浏览商品下单。这些操作都可能涉及微服务,
如用户服务(用于用户注册、登录)
、商品服务(用于展示商品信息)
、订单服务(用于下单)
这些微服务都是独立运行的,并且可以通过轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)
(2).分布式
① 说明: 分布式系统是一组独立的计算机,它们通过网络连接并协同工作,对用户来说就像是一个统一的系统。分布式系统的核心概念包括分布性、自治性、并行性和全局性。
② 简单说: 分布式系统就像是一个团队,每个成员都有自己的任务,但是他们通过沟通和协作来完成一个共同的目标。每个成员都有自己的能力和职责(自治性),并且可以同时工作(并行性)。这些成员可能分布在不同的地方(分布性),但是他们通过网络连接并协同工作,对用户来说就像是一个整体(全局性)。
③ 举个栗子: 比如你在使用网上银行进行转账操作。这个操作可能需要多个服务器协同工作,比如一个服务器负责验证你的身份信息,另一个服务器负责处理转账操作,还有一个服务器负责记录交易信息。这些服务器可能分布在不同的地理位置,但它们通过网络连接并协同工作,对你来说就像是在与一个统一的系统进行交互。
④ 分布式系统的缺点:
(3).云原生
①说明: 云原生是一种构建和运行应用程序的方法,它利用了云计算的优势,如弹性、可扩展性和自动化。云原生的核心概念包括容器化、微服务、DevOps和持续交付。
②举个栗子: 把云原生比作一个餐厅。在这个餐厅里,每道菜都是由一个专门的厨师(微服务)负责制作。这些厨师使用标准化的食材(容器化),并且可以根据客人的需求快速调整菜品(弹性)。餐厅的管理人员使用先进的管理方法(DevOps),确保餐厅的运营高效顺畅。餐厅还不断推出新菜品(持续交付),以满足客人不断变化的需求。