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

(一)SpringBoot3---尚硅谷总结

目录

示例Demo:

1、我们先来创建一个空工程:

2、我们通过Maven来创建一个Module:

3、让此Maven项目继承父项目:

4、导入web开发的场景启动器

 5、创建Springboot项目的主入口程序:

6、举例测试:

7、Springboot还能够简化部署:直接打个包即可

7.1 通过Maven把应用进行打包:把项目打成可执行的jar包  

7.2 打包成功:把项目打成可执行的jar包

7.3 运行成功

8、Springboot还能够简化运维:

8.1 直接在同目录下创建一个空的配置文件,比如说我要修改端口号:

8.2 然后重新运行此jar包:端口号已经修改成功了

9、Springboot特点总结:

1. 简化整合

2. 简化开发

3. 简化配置

4. 简化部署

5. 简化运维

10、Spring Initializr 创建向导

 11、Springboot的便捷特性都依赖于这两个机制:

1、为什么导入starter-web所有相关依赖都导入进来?

2、为什么我们导入场景启动器的时候,版本号都不用写:

3、自定义版本号

3.1、直接在当前项目properties标签中声明父项目用的版本属性的key:

3.2、直接在导入依赖的时候声明版本:

4、第三方的jar包

示例Demo:

1、我们先来创建一个空工程:

2、我们通过Maven来创建一个Module:

JDK版本需要选择17以及以上,如果没有的话你就下载一个:

3、让此Maven项目继承父项目:

       所有的Springboot项目都必须继承自spring-boot-starter-parent

<!-- 所有的Springboot项目都必须继承自spring-boot-starter-parent -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version>
</parent>

这里注意,如果这段代码你是复制的中文文档里面的,一定要看清楚这个版本号,中文文档上的版本号对应的版本可能根本就不存在!!!

4、导入web开发的场景启动器

<dependencies><!--web开发的场景启动器,所有和Web相关的功能就都引入进来了 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

所有和Web相关的功能就都引入进来了: 

 5、创建Springboot项目的主入口程序:

@SpringBootApplication //这是一个SpringBoot引用
public class MainApplication {public static void main(String[] args){SpringApplication.run(MainApplication.class,args);}
}

6、举例测试:

//@ResponseBody注解用于标识一个控制器方法,
// 可以将该方法的返回值作为响应报文的响应体,响应到浏览器@RestController //等同于:@Controller + @ResponseBody
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello,SpringBoot 3";}
}

@ResponseBody:注解用于标识一个控制器方法,可以将该方法的返回值作为响应报文的 

                          响应体,响应到浏览器

@RestController:复合注解

7、Springboot还能够简化部署:直接打个包即可

                加入应用打包插件:

<!-- SpringBoot官方提供的应用打包插件-->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
7.1 通过Maven把应用进行打包:把项目打成可执行的jar包
               clean和package居然可以多选 

7.2 打包成功:把项目打成可执行的jar包

7.3 运行成功
  •    运行前记得把在idea运行的此项目停掉,要不然会有端口冲突:
  •    
  •    我们直接可以在装有JDK17+的服务器上运行了,都不需要安装tomcat(Springboot有内嵌的tomcat),直接回车:

8、Springboot还能够简化运维:

        修改配置只需在外部创建一个application.properties文件,在这个文件中修改好后,

        重新运行此jar包即可:

8.1 直接在同目录下创建一个空的配置文件,比如说我要修改端口号:

8.2 然后重新运行此jar包:端口号已经修改成功了

9、Springboot特点总结:

1. 简化整合

导入相关的场景,拥有相关的功能。场景启动器

默认支持的所有场景:Developing with Spring Boot

  • 官方提供的场景:命名为:spring-boot-starter-*
  • 第三方提供场景:命名为:*-spring-boot-starter

场景一导入,万物皆就绪

  •  springboot官方提供的应用启动器会有前缀:spring-boot-starter-***
  •  第三方提供场景:命名为:****-spring-boot-starter

2. 简化开发

无需编写任何配置,直接开发业务

3. 简化配置

application.properties

  • 集中式管理配置。只需要修改这个文件就行 。
  • 配置基本都有默认值
  • 能写的所有配置都在: Common Application Properties

4. 简化部署

打包为可执行的jar包。

linux服务器上有java环境。

5. 简化运维

修改配置(外部放一个application.properties文件)、监控、健康检查。

.....

10、Spring Initializr 创建向导

选择我们当前的springboot需要哪些场景:

利用Spring Initializr 创建的项目相对于一键创建好了整个项目结构:

 11、Springboot的便捷特性都依赖于这两个机制:


                                        依赖管理机制、自动配置机制

思考:

1、为什么导入starter-web所有相关依赖都导入进来?

  • 开发什么场景,导入什么场景启动器。
  • maven依赖传递原则。A-B-C: A依赖B,B依赖C,那么A就拥有B和C
  • 导入场景启动器。 场景启动器就会自动把这个场景的所有核心依赖jar包全部导入进来  

例如:你把web开发的场景启动器spring-boot-starter-web导入进来了,那么所有和Web相关的功能就都引入进来了:

2、为什么我们导入场景启动器的时候,版本号都不用写:

  • 每个boot项目都有一个父项目spring-boot-starter-parent:
  • parent的父项目是spring-boot-dependencies,在spring-boot-dependencies中管理了相关的依赖以及版本:
  • 父项目 版本仲裁中心,把所有常见的jar的依赖版本都声明好了。
  • 比如:mysql-connector-j,我们只需要写依赖,不需要管版本:

3、自定义版本号

  • 利用maven的就近原则,如果我自己声明了,就用我自己的版本号,没有声明,就用父项目里提供的版本号:

3.1、直接在当前项目properties标签中声明父项目用的版本属性的key:

3.2、直接在导入依赖的时候声明版本:

4、第三方的jar包

  • springboot父项目中没有管理的第三方jar包,则需要自行声明版本号,例如:
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.16</version>
</dependency>

相关文章:

  • GCC 安装编译linux
  • 网页在线封装App技术,创新封装流程
  • 什么是中间件?
  • 蓝桥杯省赛无忧 编程7
  • MATLAB | 龙年大吉,使用MATLAB绘制会动的中国风神龙
  • 产品经理与产品运营的区别和联系
  • Apache-iotdb物联网数据库的安装及使用
  • Pytest 测试框架与Allure 测试报告——Allure2测试报告-L1
  • 背单词——冰雹猜想
  • Leetcode 3016. Minimum Number of Pushes to Type Word II
  • 区间预测 | Matlab实现GRU-Adaboost-ABKDE的集成门控循环单元自适应带宽核密度估计多变量回归区间预测
  • Python中的卷积神经网络(CNN)入门
  • 第15届蓝桥杯嵌入式省赛准备第二天总结笔记(使用STM32cubeMX创建hal库工程+按键输入)
  • FPGA物理引脚,原理(Pacakge and pinout)-认知3
  • 使用 vsCode创建GO项目
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • canvas 五子棋游戏
  • CentOS从零开始部署Nodejs项目
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • DataBase in Android
  • Fastjson的基本使用方法大全
  • java8 Stream Pipelines 浅析
  • JavaScript设计模式与开发实践系列之策略模式
  • MYSQL 的 IF 函数
  • Sass Day-01
  • 开发基于以太坊智能合约的DApp
  • 前端面试总结(at, md)
  • 实现简单的正则表达式引擎
  • 使用putty远程连接linux
  • 你对linux中grep命令知道多少?
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #if #elif #endif
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #Z2294. 打印树的直径
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (理论篇)httpmoudle和httphandler一览
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (数据结构)顺序表的定义
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)linux 命令大全
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net - 类的介绍
  • .Net MVC + EF搭建学生管理系统
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C++]AVL树怎么转
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件