【SpringBoot】配置文件详解
配置文件详解
- 一. 配置文件作用
- 二. 配置文件的格式
- 1. properties 配置文件说明
- ①. properties 基本语法
- ②. 读取配置⽂件
- ③. properties 缺点
- 2. yml 配置⽂件说明
- ①. yml 基本语法
- ②. yml 使用进阶
- 3. properties VS yml
- 三. 设置不同环境的配置⽂件
一. 配置文件作用
整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:
- 数据库的连接信息(包含⽤户名和密码的设置);
- 项⽬的启动端⼝;
- 第三⽅系统的调⽤秘钥等信息;
- ⽤于发现和定位问题的普通⽇志和异常⽇志等。
二. 配置文件的格式
.properties
.yml
-
理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。
-
当 properties 和 yml ⼀起存在⼀个项⽬中时, .properties 配置⽂件的优先级最⾼,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息。
1. properties 配置文件说明
properties 配置⽂件是最早期的配置⽂件格式,也是创建 Spring Boot 项⽬默认的配置⽂件。
①. properties 基本语法
properties 是以键值的形式配置的,key 和 value 之间是以 “=” 连接的。
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
配置⽂件中使⽤“#”来添加注释信息。
②. 读取配置⽂件
使⽤ @Value 注解来实现。@Value 注解使⽤ “${}” 的格式读取。
@Component
public class ReadYml {@Value("${server.port}")private String port;@PostConstructpublic void postConstruct() {System.out.println("Read YML,port:" + port);}
}
启动项目:
注意 @Value 属于 Spring 包里面的,不要导错了
③. properties 缺点
properties 配置是以 key-value 的形式配置的,properties 配置⽂件中会有很多的冗余的信息。
想要解决这个问题,就可以使⽤ yml 配置⽂件。
2. yml 配置⽂件说明
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。
yml 优点分析
- yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
- yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
- yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl 中。
①. yml 基本语法
yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空格的⽅式组成的,其中的空格不可省略。
username: root # 正确username:root # 错误
使⽤ yml 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8username: rootpassword: root
②. yml 使用进阶
- yml 配置不同数据类型及 null
# 字符串
value1: Hello
# 布尔值,true或false
value2: true
value3: false
# 整数
value4: 10
value: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
value5: 3.14159
value6: 314159e-5 # 科学计数法
# Null,~代表null
value7: ~
对于基本数据类型直接 key: value 即可。
yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可
@Component
public class ReadYml {@Value("${value1}")private String hello;@PostConstructpublic void postConstruct() {System.out.println("Read YML,Hello:" + hello);}}
注意:有可能不让你自己定义属性,在 pom.xml 中加入依赖即可。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
注意事项:value 值加单双引号
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表示特殊的含义。
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
@Component
public class ReadYml {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@PostConstructpublic void postConstruct() {System.out.println("string.str1:" + str1);System.out.println("string.str2:" + str2);System.out.println("string.str3:" + str3);}
}
- 字符串默认不⽤加上单引号或者双引号。
- 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
- 双引号不会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思。
- 配置对象
我们还可以在 yml 中配置对象,如下配置:
student:id: 1name: Javaage: 18
student 直接就是 类名,无类型,哪个类进行读取,那么就是哪个类型。
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
student: {id: 1,name: Java,age: 18}
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties 来读取,具体实现如下:
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}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;}@Overridepublic String toString() {return "StudentComponent{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
注意:这里面类的属性名要和 yml 文件中的属性名一致。并且类的属性一定要提供 get、set 方法,配置文件是根据 set 方法将对应的属性赋值的。
@Component
public class ReadYml {@Autowiredprivate StudentComponent studentComponent;@PostConstructpublic void postConstruct() {System.out.println(studentComponent);}
}
- 配置集合
配置⽂件也可以配置 list 集合
dbtypes:name:- mysql- sqlserver- db2
dbtypes 表示一个 类名,name 表示类里面有一个 list 名为 name , - 表示一个元素。
所以这段代码的意思就是有一个类名为 dbtypes,该类里面有一个名为 name 的list, list 里面有 三个值,mysql、sqlserver 和 db2
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
dbtypes: {name: [mysql,sqlserver,db2]}
集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的
@Component
public class ReadYml {@Autowiredprivate ListConfig listConfig;@PostConstructpublic void postConstruct() {System.out.println(listConfig.getName());}
}
3. properties VS yml
- properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略。
- properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。
- yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。
- yml ⽀持更多的数据类型。
三. 设置不同环境的配置⽂件
开发环境和生产环境使用的配置是完全不同的。
1、创建不同环境的配置⽂件:
-
application-dev.yml
-
application-prod.yml
这个文件命名的方式是固定的 application 加上 - 再加上 其他名字,用这个名字来区分不同的配置文件。
2、在 application.yml 中设置运⾏环境
spring.profiles.active=dev
这样表示使用 application-dev.yml 这个配置文件。
spring.profiles.active=prod 就表示使用 application-prod.yml 这个文件。
相关文章:
【SpringBoot】配置文件详解
配置文件详解 一. 配置文件作用二. 配置文件的格式1. properties 配置文件说明①. properties 基本语法②. 读取配置⽂件③. properties 缺点 2. yml 配置⽂件说明①. yml 基本语法②. yml 使用进阶 3. properties VS yml 三. 设置不同环境的配置⽂件 一. 配置文件作用 整个项…...
一文讲懂-五险一金
假设在“北京”:这里的数值并不代表任何真实的城市或地区,只是为了说明计算方法。 工资: 月工资为 6000 元。养老保险: 单位比例: 20% 个人比例: 8%医疗保险: 单位比例: 10% 个人比例: 2%失业保险: 单位比例: 2% 个人比例: 0.5%工伤保险: 单位比例: 0.5…...
判断三条边是否构成三角形(Python实现)
组成三角形的三条边a,b,c需满足条件: ab>c ac>b bc>a 已知:三角形任意三条边的长度之和大于第三条边。 解题:定义3个变量a、b、c,让用户输入任意三个数字赋值给三个变量。判断三个变量中是否任意两个之和大于第三个数值。 判断条件之…...
The directory ‘*‘ or its parent directory is not owned by the current user
python安装编译时出现如下错误 The directory /home/admin/.cache/pip/http or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may …...
leetcode做题笔记162. 寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时间复杂度为 O(…...
nginx负载转发源请求http/https:X-Forwarded-Proto及nginx中的转发报头
今天在排查服务器的问题时最后定位到服务器因为经过了运维这一层的处理,转发过来的请求不管用户请求的是https还是http,我们的proxy服务器收到的都是80端口上的http。于是联系相关部门了解有没有现成的可用的这样一个字段来获得这个值。公司用的也是标准…...
Docker compose插件安装
添加docker源 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/do…...
【数据结构与算法】树、二叉树的概念及结构(详解)
前言: 💥🎈个人主页:Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--树以及二叉树的概念与结构 目录 一.树概念及结构 1.树的概念 1.1树与非树 树的特点࿱…...
函数指针数组指针(指向函数指针数组的指针)
一、什么是函数指针数组指针? 本质是指针,指向函数指针数组,存放函数指针数组的地址。 代码如下: pfArr是函数指针数组 p是函数指针数组指针 int main() {int(*pfArr[])(int, int) { Add,Sub };//函数指针数组int(*(*p)[])(int, …...
经典算法-----汉诺塔问题
前言 今天我们学习一个老经典的问题-----汉诺塔问题,可能在学习编程之前我们就听说过这个问题,那这里我们如何去通过编程的方式去解决这么一个问题呢?下面接着看。 汉诺塔问题 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说&#x…...
博客之站项目测试报告
项目背景项目功能测试计划Bug总结升级自动化测试正常登录流程 项目背景 1:博客之站系统是采用前后端分离的方式来实现;使用MySQL、Redis数据库储存相关数据;同时部署到云服务器上。 2:包含注册页、登录页、博客列表页、个人列表页…...
k8s晋级之管理容器的计算资源
概述 在 Kubernetes 中创建工作负载时,您可以为 Pod 中的每一个容器指定其所需要的内存(RAM)大小和 CPU 数量。如果这些信息被指定了,Kubernetes 调度器可以更好的决定将 Pod 调度到哪一个节点。对于容器来说,其所需要…...
计算机竞赛 深度学习火车票识别系统
文章目录 0 前言1 课题意义课题难点: 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 图像识别 火车票识别系统 该项目较为新颖,适…...
盒子阴影和网页布局
盒子阴影 box-shadow: 10px 10px 10px 4px rgba(0,0,0,.3);//最后一个是透明度 传统网页布局的三种方式 标准流 就是按照规定好的默认方式排列 1.块级元素:div、hr、p、h1~h2、ul、ol、dl、form、table 行内元素会按照书顺序,从左到右顺序排列&#…...
Ph.D,一个Permanent head Damage的群体
一个群体 Permanent head Damage 的博士生群体 Permanent head Damage Ph.D 博士生一年级的同学们,不要担忧或高兴得太早,抱歉你们还没有经历Qualification——预备考试,你们暂且不能被称为博士,只能称自己是要努力成为博士预备…...
visual studio禁用qt-vsaddin插件更新
visual studio里qt-vsaddin插件默认是自动更新的,由于qt-vsaddin插件新版本的操作方式与老版本相差较大,且新版本不稳定,容易出Bug,所以需要禁用其自动更新,步骤如下: 点击VS2019菜单栏上的【扩展】–…...
Docker通过Dockerfile创建Redis、Nginx--详细过程
创建Nginx镜像 我们先创建一个目录,在目录里创建Dockerfile [rootdocker-3 ~]# mkdir mynginx [rootdocker-3 ~]# cd mynginx [rootdocker-3 ~]# vim Dockerfile Dockerfile的内容 FROM daocloud.io/library/centos:7 RUN buildDepsreadline-devel pcre-devel o…...
关于使用 uniapp Vue3 开发分享页面 语法糖 setup 开发获取ref踩坑
上代码 前端代码 <!-- 分享弹出 --> <uni-popup ref"share" type"share" safeArea backgroundColor"#fff"><uni-popup-share></uni-popup-share> </uni-popup>处理函数 import {onNavigationBarButtonTap} from…...
Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的时间管理系统,采用M(model࿰…...
企业如何实时监管员工聊天转账行为
你还在担心员工飞单、私单吗? 你还在担心员工辱骂删除客户吗? 你还在担心员工离职会带走公司客户吗? 你还在担心员工工作不认真,工作量无法统计吗? 。。。。。。。。 在当今互联网时代,企业微信的应用已…...
2.2.3.1vim + ctags + cscope + taglist
在window下,我们一般用Source Insight来查看代码而在linux下,使用vim来查看代码,vim是一个简单的文本浏览/编辑器,它可以通过插件的形式,搭建一个完全的类Source Insight环境,通过快捷键的形式,快速查看、定位变量/函数,本文就是基于vim,通过ctags+cscope+taglist+Ner…...
JAVA面经整理(4)
一)Volitaile关键字的作用: 1)保证多线程环境下共享变量的可见性,对于一个线程对于一个共享表变量的修改,其他线程可以立即看到修改之后的共享变量的值 2)可以增加内存屏障来放置多个指令之间的重排序 volatile的使用:常常用于一写多读的情况下ÿ…...
Python3数据科学包系列(一):数据分析实战
Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 认识下数据科学中数据处理基础包: (1)NumPy 俗话说: 要学会跑需先…...
【LittleXi】【MIT6.S081-2020Fall】Lab: locks
【MIT6.S081-2020Fall】Lab: locks 【MIT6.S081-2020Fall】Lab: locks内存分配实验内存分配实验准备实验目的1. 举一个例子说明修改前的**kernel/kalloc.c**中如果没有锁会导致哪些进程间竞争(races)问题2. 说明修改前的kernel/kalloc.c中锁竞争contention问题及其后果3. 解释a…...
图像压缩:Transformer-based Image Compression with Variable Image Quality Objectives
论文作者:Chia-Hao Kao,Yi-Hsin Chen,Cheng Chien,Wei-Chen Chiu,Wen-Hsiao Peng 作者单位:National Yang Ming Chiao Tung University 论文链接:http://arxiv.org/abs/2309.12717v1 内容简介: 1)方向:…...
C++ 类和对象篇(四) 构造函数
目录 一、概念 1. 构造函数是什么? 2. 为什么C要引入构造函数? 3. 怎么用构造函数? 3.1 创建构造函数 3.2 调用构造函数 二、构造函数的特性 三、构造函数对成员变量初始化 0. 对构造函数和成员变量分类 1. 带参构造函数对成员变量初始化 2. …...
Swing程序设计(5)绝对布局,流布局
文章目录 前言一、布局管理器二、介绍 1.绝对布局2.流布局总结 前言 Swing窗体中,每一个组件都有大小和具体的位置。而在容器中摆放各种组件时,很难判断其组件的具体位置和大小。即一个完整的界面中,往往有多个组件,那么如何将这…...
linux基础知识之文件系统 df/du/fsck/dump2fs
du du [选项][目录或者文件名] -a 显示每个子文件等磁盘占用量,默认只统计子目录的磁盘占用量 -h 使用习惯单位显示磁盘占用量,如KB,MB或者GB -s 统计总占用量,不列出子目录和文件占用量 面向文件 du -a 16 ./.DS_Store 8 ./requi…...
华为云云耀云服务器L实例评测|Elasticsearch的Docker版本的安装和参数设置 端口开放和浏览器访问
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的Docker版本的安装和参数设置,端口开放和浏览器访问。 其他相关的华为云云…...
8章:scrapy框架
文章目录 scrapy框架如何学习框架?什么是scarpy?scrapy的使用步骤1.先转到想创建工程的目录下:cd ...2.创建一个工程3.创建之后要转到工程目录下4.在spiders子目录中创建一个爬虫文件5.执行工程setting文件中的参数 scrapy数据解析scrapy持久…...
上海网站制作策/四种营销模式
测试的缘由很早就接触了script标签中的defer和async这两个属性,当时也仅限知道他们的作用是起到延迟脚本而达到避免阻塞脚本的作用。当时并未对这两个属性进行深入的研究,直到我学习seajs和RequireJS这两个模块加载器中或多或少涉及了这两标签的使用。se…...
医院做网站需要备案吗/seo优化运营
你是否经常在用Eclipse是感到麻烦,一个简单的输出语句“ System.out.pritnln()”,还在一个一个的敲键盘。其实在Eclipse中有很多快捷键可以使用,掌握了这些可以大大提高我们的编(xie)程(zuo)的(ye)效率🐶。 下面让我们…...
广东移动宽带官网站/下载百度免费版
Babel 是 ES2015 语法转换器,将ES6 转换为 ES5, 官网:http://babeljs.io ES6 不能完全的呗浏览器兼用,所以我们可能需要转化成 ES5。 Babel的安装: npm install -g babel-cli // -g 表示全局安装到 nodejs 下的目录 将 Babel 的…...
如何安装wordpress手机站导航/重庆旅游seo整站优化
下载图片后,用stegsolve分析,没什么毛病,然后用binwalk进行分析,发现里面有zip文件: 接着试着用foremost进行提取,得到了一串base64密文,和一串乱码,乱码就说明有加密: 把…...
设计医院网站建设/现在最好的营销方式
2019独角兽企业重金招聘Python工程师标准>>> hdfs 管理页面http://192.168.0.205:50070/explorer.html hadoop任务运行状态页面http://192.168.0.205:8088/ 转载于:https://my.oschina.net/colin86/blog/796781...
网站建设行业分析/网站怎么快速被百度收录
艾萨克牛顿(1643 - 1727),伟大的物理学家、数学家、天文学家、自然哲学家和炼金术士。在2005年更是力压爱因斯坦,被评为“科学史上最有影响力的人”。 牛顿研究微积分,主要还是为了物理上的计算服务的,我们…...