SpringBoot的入门

一、微服务阶段

javaSE:OOP,即:面向对象程序设计

mysql:持久化

html+CSS+JS+Jquery+框架:视图

javaWeb:独立开发的MVC三层(模型层Model、视图层View以及控制层Controller)架构的网站:原始

ssm框架:简化了开发流程,配置也开始较为复杂;

war:tomcat运行

spring再简化:SpringBoot-jar:内嵌tomcat; 微服务架构!

服务越来越多:springcloud

二、SpringBoot概述

2.1、SpringBoot简化了Spring的开发

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心投入到逻辑业务的代码编写中。

2.2、Spring缺点

(1)配置繁琐:虽然Spring的组件代码是轻量级的,但是它的配置却是重量级的。配置插件以及注解都非常麻烦。

(2) 依赖繁琐:找坐标很麻烦。

2.3、SpringBoot功能

  • 自动配置:SpringBoot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个,该过程是SpringBoot自动完成的。

  • 起步依赖:起步依赖本质上是一个Maven项目对象模型(Project Object Object,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

    ​ 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 辅助功能:提供了一些大项目中常见的非功能性特性,如嵌入式服务器(如内嵌tomcat)、安全、指标、健康检测、外部配置等。

SpringBoot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

三、SpringBoot快速入门

3.1、快速构建SpringBoot工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、SpringBoot起步依赖原理

4.1、起步依赖原理分析

 <!--    导入两个坐标-->
    <!--    springboot工程需要继承的父工程  -->
    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>

    <!--    web开发的起步依赖 -->
    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

五、SpringBoot配置

5.1、配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但是如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者是application.yml(application.yaml)进行配置。

  • properties:
server.port=8080
server.address=127.0.0.1
  • xml:
<server>
  <port>8080</port>
  <address>127.0.0.1</address>
</server>
  • yml:
server:
   port: 8080
   address: 127.0.0.1 

小结

  • SpringBoot提供了2种配置文件类型:properties和yml/yaml
  • 默认配置文件名称:application
  • 在同一级目录下优先级为:properties>yml>yaml

5.2、YAML

YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同编程语言程序导入,如:C/C++、Ruly、Python、Java、Perl、C#、PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。

YAML文件的扩展名可以使用**.yml或者.yaml**。

小结

yaml:简洁,以数据为核心

  • 基本语法

    • 大小写敏感
    • 数据值前边必须有空格,作为分割符
    • 使用空格缩进表示层次关系,相同缩进表示同一级
  • 数据格式

    • 对象
    #对象(map):键值对的集合
    person:
      name:  zhangsan   #${name}  #参数引用,引用上面的name
      age: 20
      address:
          - beijing
          - shanghai
      #对象行内写法
    person2: {name: zhangsan,age: 20}
    
    • 数组:使用**“-”**表示数组每个元素
    #数组:一组按次序排列的值
    address:
      - beijing
      - shanghai
    
      #数组的行内写法
    address2: {beijing,shanghai}
    
    • 纯量
     #纯量,即我们说的常量:单个的、不可再分的值
    msg1: 'hello \n world' #不会识别转义字符,会原样输出
    msg2: "hello \n world" #会识别转义字符
    
  • 参数引用

    • ${key}
    #参数引用
    name2: lisi
    person3:
      name3: ${name2} #引用上面的name2
     age3: 21
    

    获取数据

  • 读取配置的内容

    • @Value
    • Environment
    • @ConfigurationProperties
  • 当自定义的类出现红条时,可以在pom.xml文件中加上以下依赖:

    <!--       处理器的依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
               <optional>true</optional>
            </dependency>
    

5.3、profile—进行动态配置切换

在开发SpringBoot应用时,通常同一套程序会被安装到不同的环境,比如:开发、测试以及生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常的麻烦。所以profile的功能就是用来进行动态配置切换的。

  • profiles是用来完成不同环境下,配置动态切换功能的。
  1. profile的配置方式

    • 多profile文件方式:提供多个配置文件,每个配置文件代表一种环境。
      • application-dev.properties/yml:开发环境
      • application-test.properties/yml:测试环境
      • application-pro.properties/yml:生产环境
        在这里插入图片描述

    在这里插入图片描述

    • yml多文档方式
      • 在yml中使用 **—**分隔不同的配置

    在这里插入图片描述

  2. profile激活方式

    • 配置文件:在配置文件application.properties/yml中配置:
    spring.properties.active=dev/test/pro
    
    • 虚拟机参数:在VM options中指定:

      -Dspring.properties.active=dev/test/pro
      

    在这里插入图片描述

    在这里插入图片描述

    • 命令行参数:java-jar xxx.jar指定:

      --spring.properties.active=dev/test/pro
      

在这里插入图片描述

在这里插入图片描述

5.4、项目内部配置文件加载顺序

  • 内部配置加载顺序

    Springboot程序启动时,会从以下位置加载配置文件:(优先级逐渐降低

    1.file:./config/ ** : 当前项目下的/config目录下**

    2**.file:./** :当前项目的根目录

    3.classpath:./config/ :classpath的**/config目录**

    4.classpath:/ :classpath根目录

    加载顺序为上文的排列顺序,高优先级配置的属性会失效

    config下的优先级高于resources根目录下的优先级

5.5、项目外部配置文件加载顺序

六、SpringBoot整合其他框架

6.1、SpringBoot整合Junit

SpringBoot整合Junit的实现步骤

①搭建SpringBoot工程;

②引入start-test起步依赖

<!--        starter-test起步依赖,整合Junit时需要导入 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

③编写测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes =  SpringbootTestApplication.class)
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
     public void testAdd() {
        userService.add();
    }
}

④添加测试相关注解

  • @RunWith(SpringRunner.class)

    @RunWith就是一个运行器
    @RunWith(Junit4.class)就是指用Junit4来运行
    @RunWith(SpringJunit4ClassRunner.class),让测试运行于Spring测试环境,以便在测试开始时自动创建Spring的应用上下文
    --@RunWith(Suite.class)的话就是一套测试集合
    
  • @SpringBootTest(classes = 启动类.class):用于标识当前的类为测试用例的类,只需指定一个引导类即可。

在这里插入图片描述

⑤编写测试方法

6.2、SpringBoot整合Redis

SpringBoot整合Redis的实现步骤:

①搭建SpringBoot工程
使用快速构建SpringBoot工程的方法进行构建,最后一步有一点点变化:
在这里插入图片描述

②引入redis起步依赖

<!--        Redis的起步依赖,整合redis时需要导入-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

③配置redis相关属性

④注入RedisTemplate模板

⑤编写测试方法,测试

6.3、SpringBoot整合Mybatis

SpringBoot整合Mybatis的实现步骤:

①搭建springBoot工程

②引入mybatis起步依赖,添加mysql驱动

<!--        mybatis的起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
<!--mysql的起步依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

③编写DataSource和MyBatis的相关配置

在这里插入图片描述

DataSource的配置:

#dataSource
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver  #mysql版本为8以下,8以上则为:com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///springboot?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC
    password: '010802'  #注意:若密码为纯数字或者是带有特殊符号(如:&)的,则需要使用单引号或者是双引号括起来
    username: root

MyBatis的相关配置:

#mybatis配置
mybatis:
  configuration:
    map-underscore-to-camel-case: true #下划线驼峰设置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印SQL语句
  mapper-locations: classpath:mapper/*Mapper.xml  #mapper映射文件路径,从resources开始
  type-aliases-package: com.itheima.springbootmybatis.domain   #配置别名(即:配置项目中实体类包路径)
  #  config-location: classpath:mybatis-config.xml    #指定mybatis的核心配置文件(即:mybatis-config.xml)

④定义表和实体类

⑤编写dao和mapper文件/纯注解开发

⑥测试

七、SpringBoot自动配置

7.1、Condition

Condition是在Spring4.0增加的条件判断功能,通过这个功能可以实现选择性地创建Bean操作。

需求:

​ 在spring的IOC容器中有一个User的Bean,现要求:

​ 1.导入Jedis坐标后,加载该Bean,没导入,则不加载。

<!--        导入jedis的坐标-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
<!--            <version>4.0.1</version>-->
        </dependency>

​ 2.将类的判断定义为动态的。判断哪个字节码文件存在可以动态指定。

小结:

  • 自定义条件:
    • 定义条件类:自定义类实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean值。matches方法的两个参数:
      • context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。
      • metadata:元数据对象,用于获取注解属性。
    • 判断条件:在初始化Bean时,使用**@Conditional(条件类.class)**注解
  • SpringBoot提供的常用条件注解:
    • ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
    • ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
    • ConditionalOnMisssingBean:判断环境中没有对应的Bean才初始化Bean

7.2、切换内置web服务器

  • SpringBoot的web环境中默认使用tomcat作为内置服务器。SpringBoot提供了4种内置服务器供我们选择:

    tomcatjettynetty以及undertow

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.3、Enable注解原理

7.3.1、@Enable*注解

SpringBoot中提供了很多Enable开头的注解,这些注解都用于动态启动某些功能的。而其底层原理是使用**@Import注解导入一些配置类,实现Bean的动态加载**。

7.4、@Import详解

7.4.1、@Import

@Enable*底层依赖于@Import注解导入一些类,使用**@Import导入的类会被Spring加载到IOC容器**中。而@Import提供4种用法:

  • 导入Bean

  • 导入配置类

  • 导入ImportSelector实现类。一般用于加载配置文件中的类

  • 导入ImportBeanDefinitionRegistrar实现类

7.5、@EnableAutoConfiguration注解

  • @EnableAutoConfiguration注解内使用**@Import**(AutoConfigurationImportSelector.class)来加载配置类
  • 配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当SpringBoot应用启动时,会自动加载这些配置类,初始化Bean

在这里插入图片描述

在这里插入图片描述

  • 并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean才会被初始化

7.6、自定义starter步骤分析

7.6.1、案例:需求

​ 自定义redis-starter,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean.

7.6.2、案例:实现步骤

​ ①创建redis-spring-boot-autoconfigure模块(在此模块中写配置类)

​ ②创建redis-spring-boot-starter模块,依赖redis-spring-boot-autoconfigure的模块

​ ③在redis-spring-boot-autoconfigure模块中初始化Jedis的Bean。并定义META-INF/spring.factories文件

​ ④在测试模块中引入自定义的redis-starter依赖,测试获取Jedis的Bean,操作redis。

八、SpringBoot事件监听

8.1、SpringBoot监听机制

  • Java监听机制

SpringBoot的监听机制,其实是对java提供的事件监听机制的封装。

​ Java中的事件监听机制定义了以下几个角色:

​ ①事件Event,继承java.util.EventObject类的对象

​ ②事件源Source,任意对象Object

​ ③监听器Listener,实现java.util.EventListener接口的对象

  • SpringBoot监听机制

​ SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。

​ 一些监听器接口如下:

ApplicationContextInitializerSpringApplicationRunListenerCommandLineRunnerApplicationRunner

九、 SpringBoot监控

9.1、SpringBoot监控概述-----actuator基本使用

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、配置属性、日志信息等**。**

使用步骤:

  1. 导入依赖坐标
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

在这里插入图片描述

9.2、SpringBoot Admin图形化界面的使用

  • Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序
  • Spring Boot Admin有两个角色,客户端(Client)服务端(Server)
  • 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册
  • Spring Boot Admin Server的UI界面将Spring Boot Admin Client的Actuator Endpoint上的一些监控信息。

使用步骤:

  • admin-server:

    1. 创建admin-server模块

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1wfWG09-1688477980165)(C:\Users\86137\AppData\Roaming\Typora\typora-user-images\image-20230212231557781.png)]

    ​ 2.导入依赖坐标admin-starter-server

    <!--        导入依赖坐标admin-starter-server -->
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-server</artifactId>
            </dependency>
    
    

    3.在引导类上启用监控功能**@EnableAdminServer**

    在这里插入图片描述

  • admin-client:

         1.   创建admin-client模块
    

在这里插入图片描述

​ 2.导入依赖坐标admin-starter-client

<!--        导入admin-starter-client依赖坐标-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
        </dependency>

​ 3.配置相关信息:server地址等

​ 在客户端(Client)的application.properties文件配置:

#.配置相关信息:server地址等

#执行admin.server地址
spring.boot.admin.client.instance.prefer-ip=true
spring.boot.admin.client.url=http://localhost:9000

#开启endpoint详细信息
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

​ 在服务器端(Server)的application.properties文件配置:

server.port=9000

4.启动server和client服务,访问server

十、SpringBoot部署

  • SpringBoot项目开发完毕后,支持两种方式部署到服务器:

    • jar包(官方推荐)------对应内部的tomcat

    在这里插入图片描述

    在这里插入图片描述

    • war包------对应外部的tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值