1.SpringBoot简介

SpringBoot 基于 Spring 开发。不仅继承了Spring框架原有的优秀特性,它并不是用来替代 Spring 的解决方案,而和 Spring 框架紧密结合进一步简化了Spring应用的整个搭建和开发过程。其设计目的是用来简化 Spring 应用的初始搭建以及开发过程怎么简化的呢?就是通过提供默认配置等方式让我们更容易使用。
关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,所有你想集成的常用框架,它都有对应的组件支持,例如 Redis、MongoDB、Dubbo、kafka,ES等等。SpringBoot 应用中这些第三方库几乎可以零配置地开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

优点
—快速构建一个独立的 Spring 应用程序 ;
—嵌入的 Tomcat 、 Jetty 或者 Undertow,无须部署 WAR 文件;
—提供starter POMs来简化Maven配置和减少版本冲突所带来的问题;
—对Spring和第三方库提供默认配置,也可修改默认值,简化框架配置;
—提供生产就绪型功能,如指标、健康检查和外部配置;
—无需配置XML,无代码生成,开箱即用;

刚才说 SpringBoot 简化了基于 Spring 开发,这只是最直观的一方面;还有一个方面: 也更得力于各微服务组件的支持,这也是谈 SpringBoot 必谈微服务的原因。(起初是Netflix移植到Spring),可以说是Spring Cloud带动了SpringBoot ,SpringBoot成就了SpringCloud。

image.png
image.png

1.1 微服务

微服务其实是一种架构风格,我们在开发一个应用的时候这个应用应该是由一组小型服务组成,每个小型服务都运行在自己的进程内;小服务之间通过HTTP的方式进行互联互通。
和微服务相对应的就是我们之前的,单体应用,就是大名鼎鼎的 all in one 的风格。这种风格把所有的东西都写在一个应用里面,比如我们熟悉的OA,CRM,ERP系统,所有的页面,所有的代码都放在一起,打成打成一个war包,然后把war包放在Tomcat容器中运行。
这种传统web开发的架构模式当然也有它的优势,比如它测试部署比较简单,因为不涉及到多个服务的互联互调,只需要把一个包上传到服务器就行了,可以说是一人吃饱全家不饿。同样也不会给运维带来麻烦,方便水平扩展,只需要又把相同的应用复制多份放在不同的服务器中就达到了扩展的目的。
单体应用的的缺点也显而易见,容易牵一发而动全身,比如要更改一个小小的功能,就可能需要重新部署整个应用。当然,更大的挑战就是日益增长的用户需求。
image.png

1_tf0ZfDAcMxibL1mbZVP_XA.gif

image.png

2.搭建一个简单的工程

2.1 创建pom.xml

image.png

image.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.xixi</groupId>
  7. <artifactId>helloworld</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <!--继承springboot的父项目-->
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>2.3.5.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <dependencies>
  17. <!--引入springboot的web支持-->
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-web</artifactId>
  21. </dependency>
  22. </dependencies>
  23. <build>
  24. <plugins>
  25. <!-- 这个插件,可以将应用打包成一个可执行的jar包-->
  26. <plugin>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-maven-plugin</artifactId>
  29. </plugin>
  30. </plugins>
  31. </build>
  32. </project>

将这个应用打成jar包,直接使用java -jar的命令进行执行;

2.2 编写Controller类

package com.xixi.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/world")
    public String sayHi(){
        return "hello world";
    }



}

2.3 创建启动类

package com.xixi;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication//标记springboot启动类
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

2.4 创建配置文件

image.png

server.port=8088
server.servlet.context-path=/springboot

3.note

3.1 @SpringBootApplication

该注解标记为当前类为springboot启动类,如果没有自定义@ComponentScan的话 默认以启动类所在的包作为扫描包。
在源码中可以看到如果basepackager是空的话就会使用当前类的包作为扫描包。

@SpringBootApplication源码如下:
image.png
��ComponentScanAnnotationParser

image.png