什么是SpringBooot?
简化spring应用而开发的一个框架
将整个spring技术栈进行了整合
将J2EE的开发进行一站式解释
作用:Spring Boot来简化Spring应用开发,约定大于配置,
去繁从简, just run就能创建一个独立的,产品级别的应用
背景:
J2EE笨重的开发、繁多的配置、低下的开发效率、
复杂的部署流程、第三三方技术集成难度大。
解决:
"Spring全家桶”时代。
Spring Boot→J2EE-站式解决方案
Spring Cloud→分布式整体解决方案
优点:
快速创建独立运行的Spring项目以及与主流框架集成
使用嵌入式的Servlet容器,应用无需打成WAR包(打成jar包即可运行)
starters自动依赖与版本控制(例如调用redis的starter)
大量的自动配置,简化开发,也可修改默认值
无需配置XML ,无代码生成,开箱即用
准生产环境的运行时应用监控
与云计算的天然集成
什么是微服务
**时间与作者:**2014年,Martin Fowler
传统服务模式的流程
**优点:**易于开发,测试,部署,拓展。
**缺点:**在修改时牵一发而动全身,且软件需求的日益增长,可能无法负担。
**原理:**将war包放在tomcat里进行运行,若是单个tomcat性能不够,则多复制几份,通过负载均衡机制进行运行。
微服务
概念:一个应用便是一组小型服务,可通过http的方式进行互通
每一个功能元素最终都是一个可独立替换和独立升级的软件单元
特点:
微服务是-一种架构风格
每个应用拆分为一组小型服务
每个服务运行在自己的进程内,也就是可独立部署和升级
服务之间使用轻量级HTTP交互
服务围绕业务功能拆分
可以由全自动部署机制独立部署
去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
微服务分布式化遇到的困难:远程调用 服务发现 负载均衡 服务容错 配置管理 服务监控 链路追踪 日志管理 任务调度
分布式解决方案:springboot+springcloud
环境的配置
使用springboot,首先得懂得环境的配置
系统要求(此为springboot2的要求)
Java 8 & 兼容java14 .
Maven 3.3+
idea 2020.1
maven相关配置
找到maven安装目录下conf文件夹下的setting.xml,进行如下修改
<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工程时,对pom.xml进行如下修改
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
第一个程序的实现
首先是创建主程序类
/**
* 主程序类
* @SpringBootApplication:这是一个SpringBoot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
再创建controller包,创建控制器类与方法
/* @ResponseBody 代表该类下的方法的返回值都是直接给浏览器
@Controller
*/
@RestController/*打开源码我们可以发现,这其实就是上两个注释的合并*/
public class ControllerTest1 {
@RequestMapping("/hello")
public String handle01(){
return "Hello,Spring Boot 2";
}
}
直接运行main方法
运行成功后在浏览器输入http://localhost:8080/hello
便可直接访问到定义的hello方法
配置文件与jar打包
配置文件
在resources目录下,建立application.properties,可在其下进行各项属性的配置
eg:在该文件下加入server.port=80 则下一次启动服务器,使用的端口便变成了80端口。
项目的打包
<!--在项目部署时打包成jar包-->
<packaging>jar</packaging>
<build>
<pluginManagement>
<plugins>
<!--将程序打包成jar所需的插件,该jar包可以直接执行 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
随后进行打包操作
该jar可通过cmd直接运行,效果与项目效果相同 记得取消掉cmd的快速编辑模式
总结:简化了配置(application.properties),测试(直接运行main方法),部署(一键打包成jar,在目标服务器运行即可)
自动配置与依赖管理
依赖管理
依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
依赖管理的父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
进入查看便可发现其中几乎声明了所有开发中常用的依赖的版本号,所以在其仲裁下的dependency中无需输入版本号
如果springboot自动装配给的版本不合适,可以手动进行版本的变更
利用maven的就近优先原则
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
starter(场景启动器)
1、spring-boot-starter-* : 官方的starter,*代表符合的任意词
2、只要引入starter,这个场景的所有常规需要的依赖都会自动引入
3、在springboot关于starter的介绍中,我们可以知道SpringBoot所有支持的场景l链接4.自定义starter的规范:
thirdpartyproject-spring-boot-starter
.5.*-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
6、所有场景启动器最底层的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
自动配置
自动配好SpringMVC
-
引入SpringMVC全套组件
-
自动配好SpringMVC常用组件(功能)
自动配好Web常见功能,如:字符编码问题
- SpringBoot帮我们配置好了所有web开发的常见场景
默认的包结构
-
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
-
无需以前的包扫描配置
-
想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.fallingwhite”)
-
或者@ComponentScan 指定扫描路径
-
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.fallingwhite.boot")
各种配置拥有默认值
-
默认配置最终都是映射到某个类上,如:MultipartProperties
-
配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
按需加载所有自动配置项
-
非常多的starter
-
引入了哪些场景这个场景的自动配置才会开启
-
SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面