• [学习记录] SpringBoot 1. 基础入门


    SpringBoot 1. 基础入门

    尚硅谷

    官方文档

    1.1 SpringBoot 介绍

    版本发布日志: https://github.com/spring-projects/spring-boot/wiki#release-notes

    优点:

    • 为所有的 Spring 开发提供从根本上更快且可广泛使用的入门体验
    • 简化构建配置, 无代码生成, 无需编写 XML
    • 内嵌 Web 服务器(如 Tomcat)
    • 开箱即用

    缺点:

    • 迭代快, 需要时刻关注变化
    • 封装太深, 内部原理复杂, 不容易精通

    1.2 时代背景

    1.2.1 微服务

    • 微服务是一种架构风格
    • 将一个应用拆分为一组小型服务
    • 每个服务运行在自己的进程内, 也就是说每个服务可以独立部署和升级
    • 服务之间使用轻量级 HTTP 交互
    • 服务围绕业务功能拆分
    • 可以由全自动部署机制独立部署(K8s)
    • 去中心化, 服务自洽。服务可以使用不同的语言和不同的存储技术

    1.2.2 分布式

    • 远程调用
    • 服务发现
    • 负载均衡
    • 服务容错
    • 配置管理
    • 服务监控
    • 链路追踪
    • 日志管理
    • 任务调度

    分布式解决

    • SpringBoot 编写应用
    • SpringCloud 互联
    • SpringCloud Data Flow 响应式数据流

    1.2.3 云原生

    原生应用如何上云。Cloud Native

    上云的困难:

    • 服务自愈
    • 弹性伸缩
    • 服务隔离
    • 自动化部署
    • 灰度发布(新老服务并存, 然后慢慢移除旧服务)
    • 流量治理

    2. 开始 SpringBoot

    2.1 要求

    SpringBoot 2.7.3
    Maven 3.5+
    Java 1.8+

    2.2 创建 POM.xml

    
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.3version>
            <relativePath/> 
        parent>
        <groupId>com.xzgroupId>
        <artifactId>springboot-review-recordsartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>springboot-review-recordsname>
        <description>springboot-review-recordsdescription>
        <properties>
            <java.version>1.8java.version>
        properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            dependency>
    
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    2.3 编写代码

    主程序启动类:

    @SpringBootApplication
    public class SpringbootReviewRecordsApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootReviewRecordsApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String handle01(){
            return "Hello World!你好!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    @RestController = @Controller + @ResponseBody 表示不跳转页面,只返回请求数据。

    @RequestMapping@GetMapping @PostMapping 区别:

    • @GetMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写。
    • @PostMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.POST) 的缩写。

    2.4 测试

    访问 http://localhost:8080/hello 即可, 正常的话可以看到 "Hello World!你好!"

    2.5 简化配置

    resources 中创建 application.yml 文件,添加 server.port: 8888
    然后访问 http://localhost:8888/hello 即可。

    更多可以配置的属性参考:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

    2.6 简化部署

    之前已经在 pom.xml 文件中加入了。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用 maven 打包,然后就可以看到本地 target 目录中出现了一个 springboot-review-records-0.0.1-SNAPSHOT.jar 包。
    java -jar springboot-review-records-0.0.1-SNAPSHOT.jar 命令可以直接启动应用。
    然后通过访问 http://localhost:8888/hello 即可访问。

    3. 依赖管理特性

    pom.xml 中引入的 Jar 包若不指定版本,则默认选择 parent pom 的版本,若指定版本只需添加 xml 以下

    <properties>
            <java.version>1.8java.version>
            <mysql.version>5.1.47mysql.version>
    properties>
    
    • 1
    • 2
    • 3
    • 4

    3.1 starter 场景启动器:

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    4. 自动配置

    自动配置好 Tomcat

    • 引入 Tomcat 依赖
    • 配置 Tomcat

    自动配好 SpringMVC

    • 引入 SpringMVC 全套组件
    • 自动配好 SpringMVC 常用组件(功能)
    @SpringBootApplication
    public class SpringbootReviewRecordsApplication {
    
        public static void main(String[] args) {
            // 1. 返回我们 IOC 容器
            ConfigurableApplicationContext run = SpringApplication.run(SpringbootReviewRecordsApplication.class, args);
    
            // 2. 查看容器里面的组件
            String[] names = run.getBeanDefinitionNames();
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    自动配好 Web 常见场景,比如

    • dispatcherServlet
    • characterEncodingFilter(字符编码过滤器)
    • viewResolver(视图解析器)
    • multipartResolver(文件上传解析器)

    默认的包结构

    • 主程序 SpringbootReviewRecordsApplication 所在的包及其下面的所有子包里面的组件都会被默认扫描进来
    • 无需像以前需要配置包扫描目录
    • 可以使用 @SpringBootApplication(scanBasePackages = "com.xz") 设置包扫描目录
    • @ComponentScan 也可以设置为包扫描目录,注意不能和 @SpringBootApplication 一起使用,因为 @SpringBootApplication 里面已经引入了 @ComponentScan,不能重复引入。
    • 可以这样做:
    //@SpringBootApplication(scanBasePackages = "com.xz")
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan("com.xz")
    public class SpringbootReviewRecordsApplication {
    
        public static void main(String[] args) {
            // 1. 返回我们 IOC 容器
            ConfigurableApplicationContext run = SpringApplication.run(SpringbootReviewRecordsApplication.class, args);
    
            // 2. 查看容器里面的组件
            String[] names = run.getBeanDefinitionNames();
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    各种配置拥有默认值

    • 默认配置最终都是映射到某个类上的属性的,这个类会在容器中创建对象

    按需加载所有自动配置项

    • 非常多的 starter
    • 引入了哪些场景,这个场景的配置才开启
    • SpringBoot 的所有自动配置功能都在 spring-boot-autoconfigure
  • 相关阅读:
    【学习性能分析--第二版】如何做好性能测试分析诊断调优-暨《软件性能测试、分析与调优实践之路》(第2版)推荐
    七天.NET 8操作SQLite入门到实战 - SQLite 简介
    Android OpenGL 仿自如 APP 裸眼 3D 效果
    分布式任务系统xxl-job
    线上JAVA应用平稳运行一段时间后出现JVM崩溃问题 | 京东云技术团队
    Spring-Cloud-Alibaba-SEATA源码解析(一)(客户端)
    yolo的一个ui界面中做一个摄像头检测的功能
    MySQL中存储引擎之间的对比
    如何批量新建文件夹并重命名
    DTC(diagnostic trouble code)
  • 原文地址:https://blog.csdn.net/qq_39906884/article/details/126717858