SpringBoot———初识—yaml配置文件

SpringBoot介绍

约定大于配置!!!

优点
  1. 节省了调度资源
  2. 每个各功能元素都是一个可替换的、可独立升级的软件代码

微服务

概念

微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

特点
    1. 一个微服务可独立运行在自己的进程里;
    1. 一系列独立运行的微服务共同构建起了整个系统;
    1. 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理,用户管理等;
    1. 微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用。
单体框架与微服务区别
  1. 单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
  2. 单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(redis/mysql),数据库也是单个模块对应自己的数据库。
  3. 单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

第一个SpringBoot

方法一
  • 官网下载 导入
方法二
步骤:
  1. IDEA创建,删除无关信息

若创建时没有选择添加web支持 在Pom.xml中添加支持

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>

————问题:连接失败

  • 显示:Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port.
    ————解决:端口被占用
    1. cmd中输入netstat 8080 检查是否被占用
    1. 若被占用 输入netstat -ano | findstr 8080 查看占用端口的进程号
    1. 输入taskkill /F /PID 8724 将此进程终止
    1. 重启SpringBoot
  1. 在SpringbootApplication目录下创建Controller包,pojo包等
  2. 编写helloController,启动项目
@RestController
public class helloController {

    // 编写接口
    @GetMapping("/h1")
    public String demo01(){
        return "helloWorld";
    }
}

可在application.properties中改端口号

# 更改端口号
server.port=8081

可自己设计banner.txt,在application.properties目录下创建banner.txt 赋值图片,重启SpringBoot

SpringBoot原理

Pom.xml中
  • parent中spring-boot-starter-parent的父工程:spring-boot-dependencies————用于管理核心依赖(引入SpringBoot依赖时,不需要指定版本,由父工程管理版本仓库)
启动器
<!--启动场景-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
    • spring-boot-starter-web—————导入web相关jar包
    • spring-boot-starter-test—————导入测试相关jar包
主程序
@SpringBootApplication // 表示这个类是一个SpringBoot应用
public class SpringbootApplication {
    public static void main(String[] args) {
        // 启动应用
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

@SpringBootApplication:说明这该类是SpringBoot的主配置类

  • 运行该类启动SpringBoot应用程序

该注解下有:

@ComponentScan——自动扫描并加载符合条件的组件或者bean,将这个bean注入到IOC容器中

@SpringBootConfiguration——表示这是一个SpringBoot的配置类

@EnableAutoConfiguration——开启自动配置功能

结论:SpringBoot所有的配置都是启动的时候扫描并加载

  • spring-boot-test-autoconfigure的jar包中的spring.factories中有所有的自动装配类,只要导入对应的start,拥有对应的启动器,自动装配才会生效。

自动装配生效步骤:

    1. SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
    1. 将这些值作为自动配置类导入容器,自动配置类就生效,进行自动装配工作
SpringApplication.run(该类.class,args)

开启一个应用程序,而不是运行一个main方法
1.实例化 SpringApplication,使用构造方式时调用initialize()初始化

    • 执行initialize()方法时:
      • (1) 判断式普通项目或Web项目:若是普通项目,则执行完就结束
      • (2) 查找加载所有可用的初始化器
      • (3) 获取并保存监听器
      • (4) 推断并设置main方法的定义类,找到运行的主类
  1. 执行run()方法

总结

  • 创建SpringApplication对象————在对象初始化时保存事件监听器,容器初始化类以及判断是否为web应用,保存包含main方法的主配置类。
  • 调用run方法————准备spring的上下文,完成容器的初始化,创建,加载等。会在不同的时机触发监听器的不同事件。

yaml

  • 以数据作为中心

properties格式————键值对

name=root
password=123

yaml格式————数据前记得加空格

# key-value
name: Tom

# 对象
student:
  name: JACK
  age: 18
# 行内对象
Teacher: {name: Rose,age: 20}

# 数组
pets:
  - dog
  - cat
# 行内数组
colors: [red,yellow]

注入yaml配置文件

  1. 创建实体类,添加注解

@ConfigurationProperties:将配置文件中配置的属性的值映射到组件中,绑定属性与配置文件中的值

  • 参数 prefix = “person” : 指定yaml中person的值与属性一一对应
@Component  // 组件
@ConfigurationProperties(prefix = "person")  // 赋值
public class Person {
    private String name;
    private int age;
    private Date birth;
    private Map<String,String> maps;
    private List<String> hobby;
    private Dog dog;
  1. 编写application.yaml配置文件,进行赋值

也可直接在属性上@Value进行赋值

person:
  name: Tom
  age: 18
  birth: 2021/07/12
  maps: {k1: v1,k2: v2}
  hobby:
    - sing
    - dance
    - sleep
  dog:
    name: 小白
    age: 3
  1. 测试类测试
@SpringBootTest
class Springboot02ConfigApplicationTests {
    @Autowired // 自动装配
    private Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

若使用xxx.properties,可添加注解@PropertySource——加载指定的配置文件

xx.properties与xx.yaml区别

简便

  • @ConfigurationProperties只需要写一次
  • properties的@Value则需要每个字段都添加

封装对象

  • yaml可以封装对象
  • properties不能封装对象

松散绑定:yaml中的last-name与属性中lastName一致

  • -后面跟着的字母默认是大写的。

JSR303数据校验:在字段中增加一层过滤器验证,保证数据的合法性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值