本教程来源于b站尚硅谷雷神SpringBoot2零基础入门springboot全套完整版(spring boot2)
环境:这里用的是jdk8和maven3.6.3
1 spring与springboot

1.1 为什么用SpringBoot?
能快速创建出生产级别的Spring应用。
springboot优点:

简单点说,
- 使用spring就是所有东西我自己配,springboot就是配置都给我默认配好,我只需要按需改配置就行了。
- 依赖的各种jar包版本兼容自动做好。
- 内嵌默认tomcat,打jar包,不用部署在tomcat服务器上,java -jar xxx.jar就能运行。
1.2 什么是微服务?
● 微服务是一种架构风格
● 一个应用拆分为一组小型服务
● 每个服务运行在自己的进程内,也就是可独立部署和升级
● 服务之间使用轻量级HTTP交互
● 服务围绕业务功能拆分
● 可以由全自动部署机制独立部署
● 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
微服务独立部署、去中心化就会导致分布式。
分布式需要解决的问题:
● 远程调用
● 服务发现
● 负载均衡
● 服务容错
● 配置管理
● 服务监控
● 链路追踪
● 日志管理
● 任务调度
1.3 如何解决分布式问题?
springcloud各种框架处理分布式的问题,但现在很多SpringCloud的分布式框架被springcloudalibaba的分布式框架代替了。

1.4 分布式如何部署上云?
上云的困难:
● 服务自愈
● 弹性伸缩
● 服务隔离
● 自动化部署
● 灰度发布
● 流量治理
解决方案:
云原生(Cloud Native)

2 springboot2入门案例
2.1 前期准备
maven 设置:

<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>
2.2 HelloWorld入门
需求:浏览发送/hello请求,响应 Hello,Spring Boot 2
1.创建maven工程
2.引入依赖
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu</groupId>
<artifactId>boot-01-helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父依赖-->
<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>
<build>
<plugins>
<!--打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.编写主程序类和业务

MainApplication:
/**
* 主程序类
* @SpringBootApplication:这是一个SpringBoot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
HelloController :
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
运行main方法,输入
http://localhost:8080/hello

运行成功。
4.打包
停掉服务,点击maven-clean-package

可以看到target中打了jar包

在jar包所在目录内,cmd窗口命令运行:
java -jar boot-01-helloworld-1.0-SNAPSHOT.jar
同样可以启动,测试页面成功即可,停掉服务就直接关cmd窗口。
5.配置

所有配置在这个里面。
具体怎么配可以去官网查:https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/appendix-application-properties.html#common-application-properties
3 了解自动配置原理
3.1 springboot特点
3.1.1 依赖管理


版本号标签是这样得到的:


3.1.2 自动配置


3.1.3 容器功能
这里介绍springboot使用的常用容器相关注解。
1 组件添加
@Configuration

@Bean、@Component、@Controller、@Service、@Repository
@ComponentScan、@Import

@Conditional


2 原生配置引入
@ImportResource

3 配置绑定
如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用

方法1:@Component + @ConfigurationProperties

方法2:@EnableConfigurationProperties + @ConfigurationProperties


这种情况是用在当要使用第三方jar包里面的类,但他又没加@component,只能这样用一下。
3.2 自动配置原理入门
3.2.1 引导加载自动配置类
首先看主程序类的注解@SpringBootApplication里面,是下面这些注解的结合:

再看看@EnableAutoConfiguration这个重要的自动配置注解里面:

看import导入的AutoConfigurationImportSelector.class这个类里面,得到的信息:
1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories,文件里面写死了spring-boot一启动就要给容器中加载的所有配置类。


哪些配置生效,哪些不生效,就是下节的《2 按需开启自动配置项》解决的问题。
3.2.2 按需开启自动配置项

我们点开其中一个配置类,看到它需要按照之前我们了解过的条件注解@ConditionalXXX注解来判断生不生效:

判断了生不生效,配置怎么默认注入,怎么和配置文件application.properties绑定?
以上面截图为例,就在刚刚自动配置类上的@EnableConfigurationProperties({BatchProperties.class})注解需要的BatchProperties.class类里:

3.2.3 修改默认配置
直接通过application.properties修改属性修改默认配置,
甚至根据判断配置类生效的条件@Conditionalxxxx让它自带的不生效,然后自己写个组件注册进去就完成了定制化替换。
3.2.4 总结
● SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
● 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,指定的值从xxxxProperties里面拿。xxxProperties和配置文件进行了绑定。
● 生效的配置类就会给容器中装配很多组件
● 只要容器中有这些组件,相当于这些功能就有了
● 定制化配置
○ 用户直接自己@Bean替换底层的组件
○ 用户去看这个组件是获取的配置文件什么值就去修改。
3.2.5 最佳实践
- 引入场景依赖
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter - 查看自动配置了哪些(选做)
○ 自己分析,引入场景对应的自动配置一般都生效了
○ 配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效) - 是否需要修改
○ 参照文档修改配置项
■ https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
■ 自己分析。xxxxProperties绑定了配置文件的哪些。
○ 自定义加入或者替换组件
■ @Bean、@Component。。。
○ 自定义器 XXXXXCustomizer;
3.2.6 开发小技巧
- lombok
简化JavaBean开发,不用写setter-getter之类的常规方法,@data注解一键添加。
(1)添加依赖,springboot也默认管理了版本号
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
(2)安装插件,重启idea

(3)使用

- dev-tools
项目或者页面修改以后:Ctrl+F9;不用重启。 - Spring Initailizr(项目初始化向导)
自动添加主程序类、pom依赖、properties文件啥的。


本文档详细介绍了SpringBoot2的基础知识,包括为何使用SpringBoot、微服务概念及其挑战,以及如何通过SpringBoot解决分布式问题。此外,还深入探讨了SpringBoot的自动配置原理,包括启动流程、条件注解以及如何修改默认配置。最后,分享了一些开发小技巧,如使用Lombok简化JavaBean开发和SpringBoot的dev-tools实现热更新。
1266

被折叠的 条评论
为什么被折叠?



