springboot学习01-[springboot介绍、配置文件介绍、自动配置读取原理]

news2024/11/28 19:05:17

springboot介绍、配置文件介绍、自动配置读取原理

  • springBoot学习
    • 代码说明
      • 为什么java -jar springJar包后项目就可以启动
  • 配置文件介绍
    • 配置文件加载顺序
    • 其他约定配置文件加载顺序
    • profile配置文件加载
    • 配置文件绑定类属性
      • 通过@Value的方式进行属性注入
      • 通过@ConfigurationProperties的方式进行属性注入

springBoot学习

依赖引入

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>8</maven.compiler.target>
    <maven.compiler.source>8</maven.compiler.source>
  </properties>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

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

  </dependencies>

 <!--打包好
  帮我们把所有依赖的jar 统统放到jar文件里面的BOOT-INF\lib中
  设置MANIFEST.MF设置了启动类 .JarLauncher:自定义类加载器加载所有的jar包,调用start-class。从而启动项目
  -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

代码说明

所有的springboot都必须继承spring-boot-starter-parent,通过里面的<artifactId>spring-boot-dependencies</artifactId>帮我们管理了依赖的版本

为什么引入了starter后其他依赖也就被引入了?

一个starter也就是启动器,内置了很多的依赖,就相当于一个聚合,引入一个starter也就都引入了

为什么java -jar springJar包后项目就可以启动

  • 先打包
    在这里插入图片描述
    将打的jar包解压可以看到有个BOOT-INF的,里面还有个lib包这个lib包里存的就是项目依赖的其他jar包,叫fat-jar
    在这里插入图片描述
    META-INF中有个MANIFEST.MF文件,里面的Main-Class是所有的jar文件都有的,这个属性会自定义一个类加载器去加载fat-jar中的jar包。然后调用Start-Class去启动项目
    在这里插入图片描述

配置文件介绍

springboot使用一个全局的配置文件 核心配置文件,配置文件名在 约定的情况下 名字是固定的就叫application
配置文件的作用:修改springboot自动配置的默认值;springboot在底层都给我们自动配置好了。比如端口号,springboot默认端口号8080,但是我们可以通过配置文件覆盖默认配置。

配置文件加载顺序

配置文件读取优先级:bootstrap.properties>bootstrap.yml>application.properties>application.yml 优先级大的会覆盖优先级小的

其他约定配置文件加载顺序

1、classpath根目录下
在这里插入图片描述
2、classpath根目录/config
在这里插入图片描述
3、项目根目录
如果当前项目是继承/耦合 关系maven项目的话,项目根目录=父maven项目的根目录。如果是项目只有一个模块那么项目根目录 那就是当前模块的根目录
在这里插入图片描述
4、项目根目录 /config
如果当前项目是继承/耦合 关系maven项目的话,项目根目录=父maven项目的根目录 /config。如果是项目只有一个模块那么项目根目录 那就是当前模块的根目录 /config
在这里插入图片描述
优先级由上到下,由低到高

profile配置文件加载

多环境配置配置文件
profile文件命名规则:application-名称.yml
在这里插入图片描述

  • 在applicaction.yml中进行激活
spring:
  profiles:
    active: dev

配置文件绑定类属性

  • 定义实体bean
@Data
@ToString
public class User {
    private String username;
    private Integer age;
    private Date birthday;
    private List<String> hobbies;
    private Map<Integer,String> girlFriend;
    private Address address;
}

@Data
public class Address {
    private Integer id;
    private String detailAddress;
}
  • 定义yml文件
user:
  username: zzq
  age: 25

通过@Value的方式进行属性注入

@Data
@ToString
@Component
public class User {

    @Value("${user.username}")
    private String username;

    @Value("${user.age}")
    private Integer age;

    private Date birthday;
    private List<String> hobbies;
    private Map<Integer,String> girlFriend;
    private Address address;
}
  • 测试
@SpringBootTest(classes = MyApplication.class)
public class Test {

    @Autowired
    private User user;

    @org.junit.jupiter.api.Test
    public void test(){
        System.out.println(user);
    }
}

在这里插入图片描述

通过@ConfigurationProperties的方式进行属性注入

@Data
@ToString
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String username;
    private Integer age;
    private Date birthday;
    private List<String> hobbies;
    private Map<Integer,String> girlFriend;
    private Address address;
}
  • 测试
@SpringBootTest(classes = MyApplication.class)
public class Test {

    @Autowired
    private User user;

    @org.junit.jupiter.api.Test
    public void test(){
        System.out.println(user);
    }
}

在这里插入图片描述
@ConfigurationProperties:常用于bean属性和yml配置文件的绑定。prefix:可以指定配置文件中某一个节点,该节点中的子节点将自动和属性进行绑定
此外@ConfigurationProperties还支持松散绑定
在这里插入图片描述
@value和@ConfigurationProperties区别,最大的一个区别就是@ConfigurationProperties可以匹配多个,@value需要一个一个去匹配,比较麻烦

  • 我们目前写yml文件没有提示,如果需要提示需要引入spring-boot-configuration-processor依赖
    这个依赖会生成METE-INFO 元数据 用于提供idea自动提示配置文件的
     <!--这个依赖会生成METE-INFO 元数据 用于提供idea自动提示配置文件的-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <!--依赖不会传播 如果这是个父模块,子模块不会继承这个依赖-->
      <optional>true</optional>
    </dependency>
  • 如果想要自动提示还需要修改idea相关配置
    在这里插入图片描述
    生成的元数据-用于自动提示
    在这里插入图片描述
  • 补充完剩余的属性
  • list类型
  hobbies:
    - 唱歌
    - 跳舞
    - 打篮球
   hobbies: [唱歌、跳舞、打篮球]

在这里插入图片描述

  • map的类型
  girl-friend:
    18: 范冰冰
    19: 刘亦菲
  girl-friend: {18:范冰冰,19:刘亦菲}

在这里插入图片描述

  • 嵌套对象
  address:
    id: 5
    detailAddress: 6666
  • 完整配置
user:
  username: zzq
  age: 123
  birthday: 2020/01/01
  hobbies:
    - 唱歌
    - 跳舞
    - 打篮球
  girl-friend: {18:范冰冰,19:刘亦菲}
  address:
    id: 6
    detailAddress: 6666

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

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

相关文章

Springboot 集成 Shardingsphere-JDBC

Springboot 集成 Shardingsphere-JDBC Shardingsphere系列目录&#xff1a;背景前提新增依赖分表策略简单分库分表策略垂直分库广播表水平分库(单表)水平分库(多表)水平分表 HINT配置逻辑代码 自定义分库分表&#xff08;精准定位范围查询&#xff09;配置代码精准定位数据库精…

计算机系统基础实训七-MallocLab实验

实验目的与要求 1、让学生理解动态内存分配的工作原理&#xff1b; 2、让学生应用指针、系统级编程的相关知识&#xff1b; 3、让学生应用各种动态内存分配器的实现方法&#xff1b; 实验原理与内容 &#xff08;1&#xff09;动态内存分配器基本原理 动态内存分配器维护…

python入门基础知识(错误和异常)

本文部分内容来自菜鸟教程Python 基础教程 | 菜鸟教程 (runoob.com) 本人负责概括总结代码实现。 以此达到快速复习目的 目录 语法错误 异常 异常处理 try/except try/except...else try-finally 语句 抛出异常 用户自定义异常 内置异常类型 常见的标准异常类型 语法…

Java赋值运算符

Java赋值运算符分为以下&#xff1a; 符号 作用 说明 赋值 int a 10,把10赋值给变量a 加后赋值 ab,将ab的值赋值给变量a - 减后赋值 a-b,将a-b的值赋值给变量a* 乘后赋值 a*b,将a*b的值赋值给变量a / 除后赋值 a/b,将a/b的值赋值给变量a % 取余赋值 a%b,将a%b的值赋值给变量…

全面国产化之路-信创

概叙 信创&#xff0c;即信息技术应用创新产业&#xff0c;这个词儿最早来源于“信创工委会”&#xff08;全称是信息技术应用创新工作委员会&#xff09;&#xff0c;是在2016年由24家专业从事软硬件关键技术研究及应用的国内单位共同发起成立的一个非营利性社会组织。后…

qt+halcon实战

注意建QT工程项目用的是MSVC&#xff0c;如果选成MinGW,则会报错 INCLUDEPATH $$PWD/include INCLUDEPATH $$PWD/include/halconcppLIBS $$PWD/lib/x64-win64/halconcpp.lib LIBS $$PWD/lib/x64-win64/halcon.lib#include "halconcpp/HalconCpp.h" #include &quo…

一个漂亮的网站收藏函数

<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网站收藏</title><style>body …

会自动清除的文件——tempfile

原文链接&#xff1a;http://www.juzicode.com/python-tutorial-tempfile/ 在某些不需要持久保存文件的场景下&#xff0c;可以用tempfile模块生成临时文件或者文件夹&#xff0c;这些临时文件或者文件夹在使用完之后就会自动删除。 NamedTemporaryFile用来创建临时文件&…

Gradle学习-1

1、APK构建流程 2、Gradle的安装 &#xff08;1&#xff09;安装Java JDK JAVA JDK 下载地址下载安装后需要配置环境变量gradle是运行在Java虚拟机上的&#xff0c;所以需要配置Java JDK &#xff08;2&#xff09;安装 Gradle Gradle下载官网下载安装后需要配置环境变量 …

跨行业数据资产共享与协同:构建一体化数据共享平台,解锁数据资产潜力,促进多行业数据流通与深度应用,共创数字化转型新篇章,引领行业发展新趋势,开启智慧互联新纪元

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为推动社会进步和经济发展的关键要素。然而&#xff0c;在传统行业领域&#xff0c;数据往往被限制在各自的“孤岛”中&#xff0c;难以实现跨行业的流通与共享。这不仅限制了数据的价值发挥&#xff0c;也阻碍了行业的创…

show/hide信号演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>gint delete_event(GtkWidget *window, GdkEvent *event, gpointer data) {gtk_widget_hide(window);return TRU…

Vue78-缓存路由组件

一、需求 路由切走的时候&#xff0c;组件会被销毁&#xff0c;路由切回来&#xff0c;组件被挂载&#xff01; 需要&#xff1a;路由切走的时候&#xff0c;组件不会被销毁。 二、代码实现 若是不加include属性&#xff0c;则在<router-view>里面展示的路由&#xff0c…

【一】【算法】经典树状数组和并查集,详细解析,初步认识,【模板】树状数组 1,树状数组并查集

【模板】树状数组 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某一个数加上 x x x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n , m n,m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 第二…

webpack安装sass

package.json文件 {"devDependencies": {"sass-loader": "^7.2.0","sass": "^1.22.10","fibers": "^4.0.1"} }这个不用webpack.config.js module.exports {module: {rules: [{test: /\.s[ac]ss$/i,u…

日元预计明年开始上涨

被称为“日元先生”的前大藏省&#xff08;现财务省&#xff09;财务官榊原英资预测&#xff0c;美元兑日元汇率将在今年底或2025年初逐步升至130。他认为&#xff0c;通缩时代已经过去&#xff0c;通货膨胀即将来临。 《日本经济新闻》6月5日报道&#xff0c;日本财务省于5月3…

AI大眼萌探索 AI 新世界:Ollama 使用指南【1】

在人工智能的浪潮中&#xff0c;Ollama 的出现无疑为 Windows 用户带来了一场革命。这款工具平台以其开创性的功能&#xff0c;简化了 AI 模型的开发与应用&#xff0c;让每一位爱好者都能轻松驾驭 AI 的强大力量。大家好&#xff0c;我是AI大眼萌&#xff0c;今天我们将带大家…

全志 Android 11:实现响应全局按键

一、篇头 最近实现热键想功能&#xff0c;简单总结了下全志平台Android 11 的响应全局热键的方法。 二、需求 实现全局热键&#xff0c;响应F-、AF、F三个按键&#xff0c;AF只用于启动调焦界面&#xff0c;F-和F除了可以启动调焦界面外&#xff0c;还用于调整镜头的焦距&…

RN组件库 - Button 组件

从零构建 React Native 组件库&#xff0c;作为一个前端er~谁不想拥有一个自己的组件库呢 1、定义 Button 基本类型 type.ts import type {StyleProp, TextStyle, ViewProps} from react-native; import type {TouchableOpacityProps} from ../TouchableOpacity/type; import…

【活动】TSRC反爬虫专项正式启动!

活动时间 即日起 ~ 2024年7月5日 18:00 测试范围&#xff1a;微信公众号、腾讯新闻等 测试域名&#xff1a;mp.weixin.qq.com 微信公众号相关接口 1. 微信公众号文章列表 2. 历史文章 3. 文章详细内容 注&#xff1a;详情报名后公布。反爬虫专项将不定期上线新业务&#xf…

Java比较运算符

关系运算符和比较运算符适用于条件判断类型。 相当于布尔值&#xff0c;只有True和False两个 符号 说明ab,判断a的值是否等于b的值&#xff0c;条件成立为true,不成立为false ! a!b,判断a和b的值是否不相等&#xff0c;条件成立为true,不成立为false > …