springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)

配置的概念:

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

注意配置文件的命名必须是application开头。

优先顺序:

在同一级目录下优先级为:properties > yml > yaml

内部配置优先顺序:

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

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

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

  4. classpath:/ :classpath的根目录

java和resources的文件会被打包到classes的目录

properties和yml实际上会被打包到classpath路径下

即优先级顺序如图:

外部配置优先顺序:

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

properties、xml、yml格式比对:

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:8080address:127.0.0.1

Yaml(yml):

  • 大小写有区别
  • 数据前必须有空格(空格数目无所谓)作为分隔符,否则不识别该数据。
  • 缩进的空格数目不重要,但是相同层级的元素要左对齐。
  • 注释的话快捷键也是ctrl+/,是#+空格。
  • 参数引用的话用${}包裹起来即可。

对象(map):键值对的集合

person:name: zhangsan# 行内写法
person: {name: zhangsan}

数组

address:- beijing- shanghai
# 行内写法address: [beijing,shanghai]

 纯量:单个的、不可再分的值。一般都是字符串

msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符

读取配置内容:

@Value

application.yml的对象,用到几个,就要注入几个。

application.yml中

server:port: 8082name: abcPerson:name: zhangsanage: 20Student:name: ${name} # 占位符,表示abc那个name会传输到这里address:- beijing- shanghaimsg1: 'hello \n world'  # 不会识别转义字符
msg2: "hello \n world"  # 会识别转义字符

HelloController中

package com.example.springini.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@Value("${name}")//和application.yml的键值对的键要同名,与下一行的私有成员名字无关private String nname;@Value("${Person.name}")private String name2;@Value("${Person.age}")private int age;@Value("${Student.name}")private String name3;@Value("${address[0]}")private String addr;@Value("${msg1}")private String msg11;@Value("${msg2}")private String msg22;@RequestMapping("/hello2")public String hello2(){System.out.println(nname);System.out.println(name2);System.out.println(name3);System.out.println(age);return "hello springboot";}@RequestMapping("/hello")public String hello(){System.out.println(addr);System.out.println(msg11);System.out.println(msg22);return "hello springboot";}
}

@Autowired+Environment

将application.yml一次性作为一个对象全都注入。

HelloController中

package com.example.springini.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController_by_environment {@Autowiredprivate Environment env;@RequestMapping("/hello")public void hello(){System.out.println(env.getProperty("name"));System.out.println(env.getProperty("Person.name"));System.out.println(env.getProperty("address[0]"));System.out.println(env.getProperty("msg1"));System.out.println(env.getProperty("msg2"));}}

@Autowired+ConfigurationProperties

将配置内容与对象相互绑定。

新建Person类中

package com.example.springini;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component  //表示这个Person类被识别成Bean@ConfigurationProperties(prefix = "person")
//如果不指定prefix为person,那么它不一定找到配置文件的person底下的两个字段name和age
//而可能去找到单独的两个字段name和age。public class Person {private String name;//命名必须和yml文件中的键值对的键保持一致private int age;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;}
}

HelloController中

package com.example.springini.controller;import com.example.springini.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController_by_ConfigurationProperties {@Autowiredprivate Person p;@RequestMapping("/hello")public void hello(){System.out.println(p.getName()+" : "+p.getAge());}}

profile(动态配置切换):

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

配置方式:

多profile文件方式

  • application-dev.properties/yml  开发环境
  • application-test.properties/yml  测试环境
  • application-pro.properties/yml   生产环境

yml多文档方式

在yml中使用----分隔不同配置

激活方式:

配置文件

在配置文件中配置:spring.profiles.active=dev

虞拟机参数

在VM options指定:-Dspring.profiles.active=dev

命令行参数

java-jar xxx.jar --spring.profiles.active=dev

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

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

相关文章

【LeetCode每日一题合集】2023.8.28-2023.9.3(到家的最少跳跃次数)

文章目录 57. 插入区间823. 带因子的二叉树解法——递推 1654. 到家的最少跳跃次数(BFS&#xff0c;&#x1f6b9;最远距离上界的证明)1761. 一个图中连通三元组的最小度数2240. 买钢笔和铅笔的方案数解法1——完全背包解法2——枚举买了几支钢笔&#xff08;推荐解法&#xff…

【ts】Partial<T>

Partial是ts中的一个内置类型&#xff0c;它用于定义对象类型的部分属性&#xff0c;当使用Partial<T>来定义一个类型T的部分类型时&#xff0c;它会将T中的属性变为可选属性&#xff08;即既可以有值又可以没值&#xff09;&#xff0c;这样就可以只提供T的一部分属性&a…

一分钟教你学会浏览器调试工具debugger

当使用谷歌浏览器或者vscode进行前端调试时&#xff0c;可以使用以下方法进行详细调试&#xff1a; 谷歌浏览器&#xff1a; 打开谷歌浏览器&#xff0c;并在地址栏中输入要调试的页面的 URL 地址。 按下 Ctrl Shift I&#xff08;Windows/Linux&#xff09;或 Command Opt…

LGFormer:LOCAL TO GLOBAL TRANSFORMER FOR VIDEO BASED 3D HUMAN POSE ESTIMATION

基于视频的三维人体姿态估计的局部到全局Transformer 作者&#xff1a;马海峰 *&#xff0c;陆克 * †&#xff0c;薛健 *&#xff0c;牛泽海 *&#xff0c;高鹏程† * 中国科学院大学工程学院&#xff0c;北京100049 鹏程实验室&#xff0c;深圳518055 来源&#xff1a;202…

C++二级题目6

数字放大 #include<iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<cmath> #include<bits/stdc.h> int a[2000][2000]; int b[2000]; char c[2000]; long long n; using namespace std; int main() {int x;…

这可能是最全面的Python入门手册了!

无论是学习任何一门语言&#xff0c;基础知识一定要扎实&#xff0c;基础功非常的重要&#xff0c;找到一个合适的学习方法和资料会让你少走很多弯路&#xff0c; 你的进步速度也会快很多&#xff0c;无论我们学习的目的是什么&#xff0c;不得不说Python真的是一门值得付出时间…

代码泄漏无感知?代码安全审计构筑企业核心资产安全防线

目录 一个不眠之夜 源代码托管&#xff1a;最容易被从内部攻破的堡垒 审计事件&#xff0c;构建源代码安全防护的“最后一道防线” 源代码托管审计事件三要素 源代码托管审计事件的价值 极狐GitLab 审计事件功能 极狐GitLab 审计事件功能特点 极狐GitLab 审计事件功能使…

Support for password authentication was removed on August 13, 2021 解决方案

打开你的github&#xff0c;Setting 点击Developer settings。 点击generate new token 按照需要选择scope 生成token&#xff0c;以后复制下来。 给git设置token样式的remote url git remote set-url origin https://你的tokengithub.com/你的git用户名/仓库名称.git然后就可…

Docker 搭建Redis 集群之路

前言 搞技术就是动手&#xff0c;动手再动手&#xff0c;实践出真知&#xff0c;毕竟最终是要解决问题的呢&#xff0c;废话不多讲&#xff0c;开搞&#xff0c;主要是为了记录一下&#xff0c;毕竟过程还是有点艰辛呢需求&#xff08;target&#xff09; Windows 电脑 装一个…

python 笔记(1)——基础和常用部分

目录 1、print 输出不换行 2、格式化输出字符串 3、浮点数的处理 4、进制转换和ASCII与字符间的转换 5、随机数 6、字符串截取和内置方法 6-1&#xff09;字符串截取 6-2&#xff09;字符串内置方法 7、元组、列表&#xff0c;及其遍历方式 7-1&#xff09;列表常用内…

为什么5G 要分离 CU 和DU?(4G分离RRU 和BBU)

在 Blog 一文中&#xff0c;5G--BBU RRU 如何演化到 CU DU&#xff1f;_5g rru_qq_38480311的博客-CSDN博客 解释了4G的RRU BBU 以及 5G CU DU AAU&#xff0c;主要是讲了它们分别是什么。但是没有讲清楚 为什么&#xff0c;此篇主要回答why。 4G 为什么分离基站为 RRU 和 BBU…

大数据HBASE的详细使用

摘要&#xff1a;本文将深入探讨大数据HBASE的使用步骤&#xff0c;帮助读者了解和掌握这一强大的分布式数据库系统的基本概念和操作技巧。通过本文的阅读&#xff0c;读者将能够熟悉HBASE的基本设置&#xff0c;了解其核心概念&#xff0c;掌握基本的查询和管理操作&#xff0…

gin分片上传文件

为什么要使用分片上传 这个为什么已经是老篇常谈了&#xff0c;主要的原因无非就是文件比较大,一次性上传如果网络中断等情况客户端又得重新上传,而且没法补充上传。 切片上传流程 客户端: 有一个大文件&#xff0c;对这个文件进行切片&#xff0c;依据实际业务进行拆分&…

Windows下搜索文件内容的关键字用什么命令

Windows下搜索文件内容的关键字用什么命令 findstr /s /n /i "keyword" file_path其中&#xff0c;/s 表示递归检索子文件夹&#xff0c;/n 表示显示搜索结果所在行号&#xff0c;/i 表示忽略大小写&#xff0c;“keyword” 是要搜索的关键字&#xff0c;file_path 是…

【LeetCode-中等题】17. 电话号码的字母组合

文章目录 题目方法一&#xff1a;递归回溯 题目 方法一&#xff1a;递归回溯 参考讲解&#xff1a;还得用回溯算法&#xff01;| LeetCode&#xff1a;17.电话号码的字母组合 首先可以画出树图&#xff1a; 先将数字对应的字符集合 加入到一个map集合 这里需要一个index来控…

MySQL为什么不推荐使用in

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 当使用IN语句时&#xff0c;MySQL可能会遇到以下问题&#xff1a; 索引问题&#xff1a;MySQL使用索引来加速查询&#x…

PPT怎么转换为PDF格式,收藏这两个在线工具。

PPT是一种常用的演示文稿格式&#xff0c;它可以包含丰富的动画效果和超链接&#xff0c;让你的内容更加生动和有趣。但是&#xff0c;如果你想将PPT分享给别人&#xff0c;或者在不同的设备上查看&#xff0c;你可能会遇到一些问题&#xff0c;比如&#xff1a; PPT文件太大&a…

使用Python实现二维应力云图

要画应力分布云图&#xff0c;可以使用Python中的科学计算和可视化库来实现 import numpy as np import matplotlib.pyplot as plt# 生成示例数据 x np.linspace(0, 10, 100) # X轴数据范围 y np.linspace(0, 5, 50) # Y轴数据范围 X, Y np.meshgrid(x, y) # 生成网…

Linux命令行

目录 CLI GUI 命令行界面 图形界面 命令行提示符 # $ ​编辑 命令一般由三个部分组成 历史命令&#xff0c;使用上下键&#xff0c;或者使用history&#xff0c;ctrlr搜索历史命令 通配符 *,? 切换用户 su 作业管理 &&#xff0c;jobs,bg,fg CLI GUI 命令行界面 …

接轨CCC国际标准,数字钥匙「出海」提速

作为汽车智能化时代的产物&#xff0c;数字钥匙正掀起全球化新趋势。 诚然&#xff0c;依托智能手机几近标配的NFC、BLE&#xff0c;数字钥匙可以实现远程操作、多人共享、人车互动等功能&#xff0c;不仅提升了整车的科技感和智能化水平&#xff0c;也提升了消费者的用车黏度…