Spring Boot概述(一)

news2024/11/25 20:19:18

1. SpringBoot 概述

1.1 SpringBoot 概念

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。

1.2 Spring 缺点

  • 1: 配置繁琐
    虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。
    Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。
    Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
    所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但它要求的回报也不少。
  • 2:依赖繁琐
    项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

1.3 SpringBoot 功能

  • 1 自动配置
    Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
  • 2 起步依赖
    起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
  • 3 辅助功能
    提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

1.4 小结

SpringBoot提供了一种快速开发Spring项目的方式,而不是对Spring功能上的增强。
Spring的缺点:

  • 配置繁琐
  • 依赖繁琐

SpringBoot功能:

  • 自动配置
  • 起步依赖:依赖传递
  • 辅助功能

2. SpringBoot 快速入门

案例:需求
搭建SpringBoot工程,定义HelloController.hello()方法,返回”Hello SpringBoot!”。

案例:实现步骤,这里就不过多赘述。

  • ① 创建Maven项目
  • ② 导入SpringBoot起步依赖
  • ③ 定义Controller
  • ④ 编写引导类
  • ⑤ 启动测试

创建实现请参考:
https://blog.csdn.net/qq_45966440/article/details/120450302?spm=1001.2014.3001.5502
小结:

  • SpringBoot在创建项目时,使用jar的打包方式。
  • SpringBoot的引导类,是项目入口,运行main方法就可以启动项目。
  • 使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样。

3. SpringBoot 起步依赖原理分析

  • spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
  • 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。
  • 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且 不会存在版本冲突等问题。

4. SpringBoot 配置

4.1 配置文件分类

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

  • properties:

    server.port=8080
    
  • yml:

    server:
    	port: 8080
    

4.2 小结

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

4.3 YAML

YAML全称是 YAML Ain’t Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。YAML文件的扩展名可以使用.yml或者.yaml。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 小结

1) 配置文件类型

  • properties:和以前一样
  • yml/yaml:注意空格

2) yaml:简洁,以数据为核心

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

  • 数据格式
    • 对象
    • 数组: 使用 “- ”表示数组每个元素
    • 纯量

  • 参数引用
    • ${key}

4.5 读取配置内容

  • 测试的ymal文件:

    name: xpp
    
    person:
      name: ${name}
      age: 23
      address:
        - benjing
        - shanghai
    
    address:
      - benjing
      - shanghai
    
    msg1: 'hello \n springboot'
    msg2: "hello \n springboot"
    
    

1) @Value

@Value("${name}")
private String name;
@Value("${person.name}")
private String name1;
@Value(("${address[0]}"))
private String address1;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(name);
    System.out.println(name1);
    System.out.println(address1);
    System.out.println(msg1);
    System.out.println(msg2);
    return "Hello SpringBoot !";
}
输出结果:
xpp
xpp
benjing
hello \n springboot
hello 
springboot

2) Environment

@Autowired
private Environment env;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(env.getProperty("name"));
    System.out.println(env.getProperty("person.age"));
    System.out.println(env.getProperty("address[0]"));

    return "Hello SpringBoot !";
}
输出:
xpp
23
benjing

3) @ConfigurationProperties

person类:

@Component//表示这个类被spring识别了
@ConfigurationProperties(prefix = "person")//绑定前缀
//下面四个注解为LomBok提供的,简化开发,自动帮我们写好get,set,有参,无参和toString方法
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
    private String name;
    private Integer age;
    private String[] address;
}

测试:

@Autowired
private Person person;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(person);
    return "Hello SpringBoot !";
}
输出结果:
Person(name=xpp, age=23, address=[benjing, shanghai])

4.6 profile

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

1) profile配置方式

  • 多profile文件方式
    提供多个配置文件,每一个代表一种环境:

    • application-dev.properties/yml 开发环境

    • application-test.properties/yml 测试环境

    • application-pro.properties/yml 生产环境

    • 注意:格式必须为application-xxx.properties/yml

    • 然后在主配置文件application.properties选择用哪种环境:

      spring.profiles.active=dev
      

    在这里插入图片描述

  • yml多文档方式

    ---
    
    server:
      port: 8081
    spring:
      config:
        activate:
          on-profile: dev
    ---
    server:
      port: 8082
    spring:
      config:
        activate:
          on-profile: test
    ---
    server:
      port: 8083
    spring:
      config:
        activate:
          on-profile: pro
    ---
    spring:
      profiles:
        active: test
    

    注:---用来划分yaml文件区域

2) profile激活方式

  • 配置文件
    即上面所讲的:在配置文件中配置:spring.profiles.active=dev
  • 虚拟机参数(了解)
    VM options指定:-Dspring.profiles.active=xxx
  • 命令行参数(了解)
    java –jar xxx.jar --spring.profiles.active=xxx

4.7 内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

  • file:./config/:当前项目下的/config目录下
  • file:./:当前项目的根目录
  • classpath:/config/:classpath的/config目录
  • classpath:/:classpath的根目录(之前我们用的就是这种)

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

在这里插入图片描述

4.8 外部配置加载顺序

通过官网查看外部属性加载顺序:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

参考链接:
https://blog.csdn.net/qq_45966440/article/details/120450397?spm=1001.2014.3001.5502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字化时代,如何通过社媒找到外贸客户?

随着全球化的深入发展,外贸客户的开发变得越来越重要。而在如今的数字化时代,社交媒体已经成为了企业开发外贸客户的重要渠道之一。本文好选客小编将从选择社媒找外贸客户的原因和方法等方面,为您介绍如何通过社媒找到外贸客户。 图片出处&am…

洛谷P8706 [蓝桥杯 2020 省 AB1] 解码 C语言/C++

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母,可能包含大写和小写。 在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 出现次数的形式。 例如,连续…

【蓝桥杯省赛真题38】Scratch流星坠落 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch流星坠落 一、题目要求 编程实现 二、案例分析 1、角色分析

vue3中使用swiper及遇到的问题

vue3中使用swiper 一、安装swiper二、使用swiper三、echarts+swiper一、安装swiper 使用npm install swiper安装swpier插件 npm install swiper -s // @9.2.0 // 或者安装指定版本 npm install swiper@8.4.7 -s二、使用swiper 直接按照官网的引用方法,项目会报错 解决方法:…

【复现论文】Looking here or there? Gaze Following in 360-Degree Images

【复现论文】Looking here or there? Gaze Following in 360-Degree Images 论文:Looking here or there? Gaze Following in 360-Degree Images 论文链接:Looking here or there? Gaze Following in 360-Degree Images 复现github链接&#xff1a…

List集合以及它的实现类和队列、栈

List集合 Collection层次的结构接口中,一些允许有重复的元素,例如:List接口。而另外一些不允许有重复的元素,例如:Set接口。其中也分为了有序与无序的(存储顺序)。 在JDK中没有提供Collection…

ppt文件太大怎么变小,这6种方式很简单

ppt文件太大怎么变小? ppt文件通常用于公司会议、教育授课和商务演讲等场合,由于需要实现各种文档效果并插入大量图片,因此文件大小要远大于普通文档文件,占用的存储空间也不少。如果电脑中存储了大量PPT文件,并且不方…

不服不行!盘点那些编程界的天才少年,11岁参加国际比赛,靠奖金赚了40万美金

程序员是一项专业性极强的工作,需要很强的思维能力和动手能力,所以大多数程序员要比普通人更聪明,与其他职业相比,程序员应该是最爱学习的一行了。科技网络的发展太快,新的技术层出不穷,时刻都要更新自己的…

L2-041 插松枝 判断量少(PTA 天梯赛)

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的: 每人手边有一只小盒子,初始状态为空。每人面前有用不完的松枝干和一个推送器,每次推送一…

计算机组成原理第二章——数据的表示与运算(下)

提示:时光清浅处 一步一安然 文章目录前言2.3.1 浮点数的表示2.3.2 IEEE7542.2.3 浮点数的运算前言 本节主要讲三个问题,浮点数的表示,IEEE 754标准,浮点数的加减运算 2.3.1 浮点数的表示 浮点数的作用和基本原理 定点数可表示…

由浅入深了解HashMap源码

由经典面试题引入,讲解一下HashMap的底层数据结构?这个面试题你当然可以只答,HashMap底层的数据结构是由(数组链表红黑树)实现的,但是显然面试官不太满意这个答案,毕竟这里有一个坑需要你去填&a…

Java容器使用注意点

前置:问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一:集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式。 我们在开发中也…

AI大模型突围战

最近,GPT赛道上争议不断,先是GPT-4的问世,用一些亮眼的功能让人类感叹自己是不是要丢工作?紧接着又有一封联名信刷屏,图灵奖得主、AI三巨头之一的约书亚本吉奥、埃隆马斯克等123个业界大佬,呼吁所有人工智能…

Vcpkg安装指定版本包或自定义安装包

文章目录前言寻找版本安装后话前言 windows一直用着vcpkg作为C跨平台开发的包管理,有些依赖要指定版本库,vcpkg目前最新的openssl版本是3.1.0,我想安装其他版本为例,开始本教程 寻找版本 以openssl举例,在vcpkg目录中…

react3:受控组件(表单默认变成受控)-组件通信 - typescript项目

受控组件:表单 非受控组件表单元素值不受所在组件状态的控制, 我们将这样的表单元素称作: 非受控组件. 受控组件受控组件 : 值受到 React 组件状态控制的表单元素一般是通过 defaultValue 属性, onChange 事件配合将非受控组件变为受控组件. 多表单元素操作 &#…

如果当前node.js版本和项目需要版本不一样,卸载重装其他版本node.js的方法

其实这种node.js版本不一样的问题,可以选择用nvm来管理node.js的不同版本。 此处仅总结卸载当前版本node.js重新安装所需版本node.js的方法 另:现在 用Vite官网里面的 yarn/npm等 的方法,创建Vue3项目——需要12版本的node.js 以下以本人 …

Vue3中readonly 与 shallowReadonly的使用区别?

文章目录前言readonly强行修改readonly:shallowReadonlyshallowReadonly强行修改结果:前言 readonly: 让一个响应式数据变为只读的(深只读)。 shallowReadonly: 让一个响应式数据变为只读的(浅只读&#x…

真正好用的工业品ERP系统应该是什么样的?

一个好用的进销存ERP系统应该有以下特点: 1. 全面覆盖企业经营流程,包括采购、销售、库存、财务等模块,能够实现全方位的管理和控制。 2. 自定义配置,灵活地适应大多数用户的需求。 3. 数据精准、实时化,支持统计分…

基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用

【查看原文】气象数据相关分析及使用系列:基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用 在研究流场时,常用观测、模型风洞测试和数值模拟方法进行研究。但时常遇到研究区气象站点分布稀疏,不能代表周边复杂地形的风场。风洞模拟…

day7 线程的取消和清理

线程的取消 意义:随时杀掉一个线程 int pthread_cancel(pthread_t thread); 注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用 如果没有取消点,手动设置一个; voi…