几个概念
- SpringBoot:官网文档
- 能快速创建出生产级别的Spring应用
- 是整合Spring技术栈的一站式框架
- 是简化Spring技术栈的快速开发脚手架
- SpringBoot优点
- 创建独立Spring应用
- 内嵌web服务器,默认使用 Tomcat
- 自动starter依赖,简化构建配置,防止各jar包冲突
- 自动配置Spring以及第三方功能
- 提供生产级别的监控、健康检查及外部化配置
- 无代码生成、无需编写XML
- 微服务概念
- 微服务是一种架构风格
- 一个应用拆分为一组小型服务
- 每个服务运行在自己的进程内,也就是可独立部署和升级
- 服务之间使用轻量级HTTP交互
- 服务围绕业务功能拆分
- 可以由全自动部署机制独立部署
- 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
- 分布式的困难:使用SpringBoot + SpringCloud解决,以下就是微服务的组件
- 远程调用:一般使用http进行服务交互
- 服务发现:看哪些服务是可用的
- 负载均衡:按照配置的算法,合理的将请求分配给不同的服务器
- 服务容错:各种错误情况下的处理方式
- 配置管理:配置中心,修改配置让服务们自己同步
- 服务监控:监控多个服务以及云平台的资源消耗和健康状况
- 链路追踪:
- 一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,
- 再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题
- 常见的解决方案有Zipkin,SkyWalking。
- 日志管理:
- 微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据,非常不方便。
- 这时候我们需要一个独立的日志平台,收集 所有节点的日志数据并可方便对其进行汇总分析 ,然后进行可视化展示
- 常见的解决方案有
- ELK(Elasticsearch+Logstash+Kibana)
- EFK(Elasticsearch+Fluentd+Kibana)
- 任务调度:基于给定的时间点,给定的时间间隔或者给定执行次数自动的执行任务
- 上云的困难:Cloud Native
- 服务自愈:其中一个服务出现错误,监控程序发现后进行复原
- 弹性伸缩:根据不同的性能需求分配更多的服务器
- 服务隔离:服务之间不相互影响
- 自动化部署:部署的过程中所有的操作全部自动化,无需人工手工干预
- 灰度发布:同样的服务有多台服务器运行,先把服务部署在其中一两台上看运行效果,没有问题了再慢慢全部升级
- 流量治理:控制流量
HelloWorld
- pom.xml配置
- 引入依赖
XML
<!--
spring-boot-starter-parent里面包含很多依赖的版本号
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<!--web项目的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 部署运行
XML
<build>
<plugins>
<!--
如果添加插件启动时报错
可以尝试在<plugin>标签内部添加设置版本号的version标签
版本号要与Spring版本号一致
-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.4.RELEASE</version>
</plugin>
</plugins>
</build>
- 创建主程序
java
/**
* 主程序类
* @SpringBootApplication:这是一个SpringBoot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
-
配置文件:在resources下application.properties或者application.yml
server.port=8888
-
业务类
java
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello,Spring Boot 3!";
}
}
- 项目打成jar包运行
- maven打包命令:mvn clean package -Dmaven.test.skip=true
- 在maven执行打包后的target文件夹下打开cmd命令窗口输入 java -jar <打包文件名> 即可在cmd命令窗口中启动spring boot项目,浏览器输入地址访问
- 注意:若cmd窗口开启了【快速编辑模式】无法启动springboot项目
- 取消方法:右键cmd控制台的窗口上方标题区域打开【属性】--【选项】取消勾选【快去编辑模式】

- 修改默认jar版本
XML
<!--
查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
在当前项目pom.xml里面重写配置
-->
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
- 默认包结构
- 主程序类所在包及其下面的所有子包里面的组件都会被默认扫描进来
- springBoot启动程序的目录一定要在controller等目录的至少上一级,或者使用注解
java
@SpringBootApplication(scanBasePackages="com.my.controller")
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("主程序所在包")