springBoot2(1基础入门)

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

本教程来源于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 最佳实践

  1. 引入场景依赖
    https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
  2. 查看自动配置了哪些(选做)
    ○ 自己分析,引入场景对应的自动配置一般都生效了
    ○ 配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效)
  3. 是否需要修改
    ○ 参照文档修改配置项
    https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
    ■ 自己分析。xxxxProperties绑定了配置文件的哪些。
    ○ 自定义加入或者替换组件
    ■ @Bean、@Component。。。
    ○ 自定义器 XXXXXCustomizer;

3.2.6 开发小技巧

  1. lombok
    简化JavaBean开发,不用写setter-getter之类的常规方法,@data注解一键添加。
    (1)添加依赖,springboot也默认管理了版本号
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

(2)安装插件,重启idea
在这里插入图片描述
(3)使用
在这里插入图片描述

  1. dev-tools
    项目或者页面修改以后:Ctrl+F9;不用重启。
  2. Spring Initailizr(项目初始化向导)
    自动添加主程序类、pom依赖、properties文件啥的。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值