SpringBoot2
前言
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
上面是引自官网的一段话,大概是说:能快速创建出生产级别的Spring应用。Spring Boot官网:https://spring.io/projects/spring-boot
一、SpringBoot概念
1.1 Spring优缺点分析
优点:
spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。
缺点:
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入 了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。
除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
1.2 SpringBoot诞生的意义
SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑 业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短 了项目周期。springboot简单、快速、方便地搭建项目;对主流开发框架的无配置集成;极大提高了开发、部署效率。
1.3 SpringBoot优点
● Create stand-alone Spring applications
创建独立Spring应用
● Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
内嵌web服务器
● Provide opinionated ‘starter’ dependencies to simplify your build configuration
自动starter依赖,简化构建配置
● Automatically configure Spring and 3rd party libraries whenever possible
自动配置Spring以及第三方功能
● 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技术栈的快速开发脚手架
1.4 SpringBoot缺点
● 人称版本帝,迭代快,需要时刻关注变化(社区活跃)
● 封装太深,内部原理复杂,不容易精通
1.5 SpringBoot三个重要概念
1.起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
2.自动配置
springboot的自动配置,指的是springboot会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它。"自动"的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,springboot会自动注入这些配置bean,我们直接使用这些bean即可。
3.约定优于配置
约定优于配置又称按约定编程,是一种软件设计范式,约定优于配置简单来理解,就是遵循约定。SpringBoot 的设计是为了让你尽可能快的跑起来Spring 应用程序并且尽可能减少你的配置文件。
1.6 时代背景
1.微服务
James Lewis and Martin Fowler (2014) 提出微服务完整概念。
● 微服务是一种架构风格
● 一个应用拆分为一组小型服务
● 每个服务运行在自己的进程内,也就是可独立部署和升级
● 服务之间使用轻量级HTTP交互
● 服务围绕业务功能拆分
● 可以由全自动部署机制独立部署
● 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
2.分布式
所谓分布式即:将各个微服务分别部署在各个服务器上,服务与服务间相互隔离。从而引起以下问题:
● 远程调用
● 服务发现
● 负载均衡
● 服务容错
● 配置管理
● 服务监控
● 链路追踪
● 日志管理
● 任务调度
● …
分布式的解决
● SpringBoot + SpringCloud
3.云原生
原生应用如何上云。 Cloud Native上云的困难:
● 服务自愈
● 弹性伸缩
● 服务隔离
● 自动化部署
● 灰度发布
● 流量治理
● …
二、SpringBoot入门
2.1 Hello SpringBoot
需求:浏览发送/hello请求,响应 Hello SpringBoot 2.4.5" + "你好!
2.2 创建maven工程导入依赖
<dependencies>
<!--场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependencies/>
2.3 创建主程序
/*
* 主程序类
* @SpringBootApplication 表示这是个springboot的应用
*/
@SpringBootApplication
public class Springboot01HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01HelloWorldApplication.class, args);
}
}
2.4 编写业务
@Slf4j
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
log.info("请求进来了-------------------");
return "Hello SpringBoot 2.4.5" + "你好!";
}
}
2.5 测试
直接运行main方法
2.6 简化配置
若要修改应用端口在 application.properties 配置文件中添加server.port=8081即可。
2.7 简化部署
引入如下的插件,可将项目打包为可执行的 jar 包,其包含和执行的所有环境。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.5</version>
</plugin>
</plugins>
</build>
如此出 maven-plugin 爆红添加 SpringBoot 的版本号与之对应。
打开maven将项目 clear --> package 出现 target 文件并生成jar包,
输入 cmd + 回车
执行命令: java -jar springboot-01-Helloworld-0.0.1-SNAPSHOT.jar