SpringBoot-配置

news2024/11/16 3:28:51

目录

起步依赖原理分析

配置文件分类

YAML

YAML:基本语法

YAML:数据格式

YAML:参数引用

读取配置内容

profile

Profile-小结

内部配置加载顺序

外部配置加载顺序


  • 起步依赖原理分析

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

  • SpringBoot是基于约定的,所以很多配置都有默认值
  • 但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置
  • properties:
  • server.port=8080
  • yml:
  • server:
    • port:8080
  • 小结
  • SpringBoot提供了2种配置文件类型:properties和yml/yaml
  • 默认配置文件名称:application
  • 在同一级目录下优先级为:properties>yml>yaml
  • YAML

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

  • 大小写敏感
  • 数据值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略
  • server:
    • port:8080
    • address:127.0.0.1
  • name:abc
  • YAML:数据格式

  • 对象(map):键值对的集合
  • person:
    • name:zhangsan
  • #行内写法
  • person: {name: zhangsan}
  • 数组:一组按次序排列的值
  • address:
    • - beijing
    • - shanghai
  • #行内写法
  • address: [beijing,shanghai]
  • 纯量:单个的、不可再分的值
  • msg1: 'hello \n world' #单引忽略转义字符
  • msg2: "hello \n world" #双引识别转义字符
  • YAML:参数引用

  • name: list
  • person:
    • name: ${name} #引用上边定义的name值
  • 读取配置内容

  • 1.@Value
  • 2.Environment
  • 3.@ConfigurationProperties
  • @Value
  • server:
      port: 8082
    
    name: abc
    # 对象
    person:
      name: zhangsan
      age: 20
      address:
        - beijing
        - shanghai
    
    # 对象行内写法
    person2: {name: zhangsan,age: 20}
    
    # 数组
    address:
      - beijing
      - shanghai
    
    # 数组行内写法
    address2: [beijing,shanghai]
    
    # 纯量
    msg1: 'hello \n world' # 不会识别转义字符,会原样输出
    msg2: "hello \n world" # 会识别转义字符
  • Environment
  • @ConfigurationProperties
  • @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String name;
        private int age;
        private String[] address;
    
        public String[] getAddress() {
            return address;
        }
    
        public void setAddress(String[] address) {
            this.address = address;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", address=" + Arrays.toString(address) +
                    '}';
        }
    }
  • @RestController
    public class HelloController {
    
        @Value("${name}")
        private String name;
        @Value("${person.name}")
        private String name2;
        @Value("${person.age}")
        private String age;
        @Value("${address[0]}")
        private String address1;
        @Value("${msg1}")
        private String msg1;
        @Value("${msg2}")
        private String msg2;
    
        @Autowired
        private Environment env;
        @Autowired
        private Person person;
    
        @RequestMapping("/hello")
        public String hello(){
            System.out.println(name);
            System.out.println(name2);
            System.out.println(age);
            System.out.println(address1);
            System.out.println(msg1);
            System.out.println(msg2);
            System.out.println("-----------------");
            System.out.println(env.getProperty("person.name"));
            System.out.println(env.getProperty("address[0]"));
            System.out.println("-----------------");
            System.out.println(person);
            String[] address = person.getAddress();
            for(String s : address){
                System.out.println(s);
            }
            return "hello SpringBoot";
        }
    }
  • profile

  • 我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境
  • 比如:开发、测试、生产等
  • 其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦
  • profile功能就是来进行动态配置切换的
  • (1)profile配置方式
    • 多profile文件方式
    • yml多文档方式
  • (2)profile激活方式
    • 配置文件
    • 虚拟机参数
    • 命令行参数
  • Profile-小结

  • (1)profile是用来完成不同环境下,配置动态切换功能的
  • (2)profile配置方式
    • 多profile文件方式:提供多个配置文件,每个代表一种环境
      • application-dev.properties/yml 开发环境
      • application-test.properties/yml 测试环境
      • application-pro.properties/yml 生产环境
    • yml多文档方式:
      • 在yml中使用---分隔不同配置
  • (3)profile激活方式
    • 配置文件:在配置文件中配置:spring.profiles.active=dev
    • 虚拟机参数:在VM options指定:-Dspring.profiles.active=dev
    • 命令行参数:java-jar xxx.jar --spring.profiles.active=dev
  • 内部配置加载顺序

  • Springboot程序启动时,会从以下位置加载配置文件:
  • 1.file:./config/:
  • 当前项目下的/config目录下
  • 2.file:./:
  • 当前项目的根目录
  • 3.classpath:/config/:
  • classpath的/config目录
  • 4.classpath:/:
  • classpath的根目录
  • 加载顺序为上文的排列顺序,高优先级配置的属性会生效
  • 外部配置加载顺序

  • 以下优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
  • 1-命令行参数:所有的配置都可以在命令行上进行指定;
  • 2-来自java:comp/env的JNDI属性;
  • 3-Java系统属性(System.getProperties());
  • 4-操作系统环境变量 ;
  • 5-jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  • 6-jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile
  • 7-jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  • 8-jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  • 9-@Configuration注解类上的@PropertySource
  • 根据第7条,我们只要在jar包同目录外放置一个application.properties配置文件,就会起作用,同时这个配置文件的优先级还比jar内的高,这个配置很有作用

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

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

相关文章

[附源码]Python计算机毕业设计GuiTar网站设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【学习笔记】《模式识别》4:贝叶斯判别准则

贝叶斯判别准则 文章目录贝叶斯判别准则一、研究对象及相关概率1. 两类研究对象2.概率3. 条件概率4. 模式识别中的三个概率5. 两对条件概率的区别二、贝叶斯决策1.最小错误率贝叶斯决策2. 最小风险贝叶斯决策3. (0-1)损失最小风险贝叶斯决策4.正态分布模式的贝叶斯决策三、贝叶…

RFID在钢筋仓库管理中的应用

RFID在钢筋仓库管理中的应用 应用背景 随着经济的迅速发展&#xff0c;带动了钢材业的迅速发展&#xff0c;钢筋的使用量也在改革开放后有了近370多倍的增长&#xff0c;如此大量的钢筋在库存管理&#xff0c;盘点&#xff0c;防盗&#xff0c;各种型号发货、防窜货上等等一系…

图片链接或pdf链接通过浏览器打开时,有时可以直接预览,有时却是下载,为什么?

在前端开发中&#xff0c;有时候需要对一些文件链接进行特殊处理&#xff0c;比如对于一些图片链接或者PDF链接&#xff0c;有时我们需要通过浏览器打开进行预览&#xff0c;有时又不希望通过浏览器进行打开&#xff0c;而是希望能够直接下载到本地。但现实效果却往往跟我们相反…

硅麦驱动开发及调试(pdm>>I2S>>pcm)

pdm 协议 PDM接口只有两根信号线&#xff1a; PDM_CLK 时钟信号。 PDM_DATA 数据信号。 I2S协议 数据发送规格 I2S在BCLK的下降沿发送数据&#xff08;发送&#xff09;&#xff0c;在上升沿进行数据采样&#xff08;接收&#xff09;。每次是先发送最高位&#xff0c;最后…

Hadoop概述

Hadoop概述 Hadoop介绍 狭义上Hadoop值的是Apache的一款开源软件。 用java语言实现开源软件框架 允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理 Hadoop核心组件 Hadoop HDFS(分布式文件存储管理系统)&#xff1a;解决海量数据存储 Hadoop YARN(集群资源管理…

3-2、python内置数据类型(列表和元组)

文章目录序列列表列表的创建列表的基本特性连接操作符和重复操作符成员操作符&#xff08;in和not in&#xff09;索引切片for循环列表的常用方法增加修改&#xff08;通过索引和切片重新赋值&#xff09;查看删除其他操作元组&#xff08;和列表相比&#xff0c;不能增删改元素…

30分钟带你精通Git使用

一、 版本控制工具 1.1. 什么是版本控制系统&#xff1f; 版本控制系统&#xff08;Version Control System&#xff09;:是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件&#xff0c;而且…

[附源码]SSM计算机毕业设计班级风采网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

TIA博途中累计流量的两种计算方法示例

TIA博途中累计流量的两种计算方法示例 如下图所示,首先,我们要了解累计流量的含义: 即t1至t2时刻,对瞬时流量求定积分,由上图可知,t1至t2的定积分,即蓝色部分的面积,那么直接求这个面积是有难度的,我们只能用近似的方法来求取, 如下图所示,把该部分面积分割成一个个…

最简单的git图解(git stash)

大家平时开发过程中肯定遇到过这样的情况&#xff1a;代码写了一半&#xff0c;但是需要紧急修改一个bug&#xff0c;还是在当前项目中修改&#xff0c;这时怎么办呢&#xff1f;把写了一半的代码进行提交&#xff1f;可能编译还通不过&#xff0c;或是启动不了&#xff0c;要是…

Java项目:SSH学生学籍管理系统及教务管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统包含管理员、教师、学生三种角色; 管理员角色包含以下功能&#xff1a; 管理员登录,学科管理,班级管理,教师管理,学籍信息管理,课表管理…

外贸软件助力国际贸易企业业财共享数字化转型升级

外贸企业数字化转型新机遇丨汇信外贸软件助力业财一体共享升级 随着国际化的进程不断加速&#xff0c;国际贸易市场的发展&#xff0c;使得外贸企业的业务范围不断扩大&#xff0c;海量的资源信息在世界各地不断产生。为了应对国际贸易信息传递的及时性&#xff0c;关于财务信…

[MySQL]复杂查询(进阶)

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.新增 2. 聚合查询 2.1 聚合函数 3. 分组查询…

Web UI 自动化测试:如何使用隐私模式进行测试

来啦老铁&#xff01; 这两天有个任务需要在桌面端 UI 自动化中使用隐私模式进行测试&#xff0c;之前没有用过&#xff0c;且在调研的时候还是小小花了点时间各种查资料的&#xff0c;因此做一下记录&#xff1b; 学习路径 1、Chrome 浏览器配置&#xff1b; 2、Edge 浏览…

电脑换cpu要重装系统吗

​cpu是一台电脑的控制以及运算核心&#xff0c;有十分重要的作用&#xff0c;不少小伙伴会遇到更换cpu的问题&#xff0c;所以小伙伴会提前了解换cpu要重装系统吗或者换cpu后bios如何设置的这类问题&#xff0c;接下来小编就为大家带来了详细的介绍&#xff0c;感兴趣的用户可…

(七)Bean的实例化方式

文章目录环境Bean的实例化方式通过构造方法实例化通过简单工厂模式实例化通过工厂方法模式实例化通过FactoryBean接口实例化BeanFactory和FactoryBean的区别BeanFactoryFactoryBean工厂Bean的使用&#xff1a;注入自定义Date上一篇&#xff1a;&#xff08;六&#xff09;Sprin…

【免杀前置课——Windows编程】十二、线程同步——一文讲懂什么是线程同步、原子操作函数、临界区、互斥体(激发态与非激发态区别)

线程同步线程同步多线程运行同一操作对象问题解决方案A:原子操作函数解决方案B:临界区解决方案C:互斥体激发态与非激发态互斥体优点:线程同步 多线程运行同一操作对象问题 #include<iostream> #include<Windows.h>LONG g_count 0; DWORD WINAPI myThreadProc1(_…

C语言工具——Visual Studio 的安装

很多新手朋友们&#xff0c;反应使用 IE 浏览器下载 Visual Studio 下载不下来&#xff0c;此时我们可以在 IE 浏览器上先装一个谷歌浏览器&#xff1a; https://chrom.lkcyl.cn/ . 然后打开谷歌&#xff0c;输入 VS 2019 的下载地址&#xff1a;https://learn.microsoft.com/…

深入浅出带你了解PHAR反序列化

前情提要 为了丰富自己是知识体系&#xff08;为了日更薅羊毛&#xff09;&#xff0c;我最近频繁翻阅MDN的文档&#xff0c;果然MDN文档常看常新。 最近翻到CSS部分&#xff0c;然后打开了伪类这一栏&#xff0c;好家伙&#xff0c;快60个了&#xff08;包括实验中的&#x…