SpringBoot 配置文件
一、配置文件作用
整个项目中所有重要的数据都是在配置文件中配置的,比如:
-
数据库的连接信息(包含用户名和密码的设置);
-
项目的启动端口;
-
第三方系统的调用秘钥等信息;
-
用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的
二、配置文件的分类
-
系统的配置文件,比如连接字符串、比如日志的相关设置,是系统定义好的
-
用户自定义的
三、配置文件的格式与规则
1、格式
Spring Boot 配置文件主要分为以下两种格式:
.properties
.yml
这就好像连锁店里面的统一服装一样,有两种不同的款式,properties 类型的配置文件就属于老款“服饰”,也是创建 Spring Boot 项目时默认的文件格式(主要是由于仓库里还有库存),而 yml 属于新版款式,如果用户了解情况直接指定要新款服饰,那么就直接发给他
2、规则
-
理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml 一起存在一个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。
-
虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率),减少开发者难度。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看
3、为配置文件安装提示插件
如果 properies 文件没有提升信息,那么就需要安装spring tools插件了
IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项目了,并且 yml 的配置文件就有提示了。但默认情况下是不⽀持 properties 格式的日志提示的,这个时候需要安装了 SpringTools 插件才会有相应的提示
四、读取配置文件
1、properties
1.1、properties 配置文件说明
properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件
1.1、properties 基本语法
properties 是以键值的形式配置的,key 和 value 之间是以 “=” 连接的,key=value
,如 application.properties:
# 系统的配置文件
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123# 自定义配置项
cctalk.token=xxx
想要查看 Spring Boot 更多系统配置项,访问官网:Common Application Properties
PS:不加空格,可能会被当做 value 的一部分
小技巧:配置文件中使用“#”来添加注释信息
1.2、关于 properies 中文乱码的问题处理
1). 配置当前项目中文乱码的问题 Settings
2). 配置新创建项目的中文乱码问题 New Projects Settings
3). 将原来的 application. properies 删除掉,重新再创建一个 application. properieso
因为之前的配置文件已经是不支持中文编码的文件格式化,设置编码再创建 application.properies 之后,所以后设置的编码不会改变原来的旧的 application.properies 文件,所以需要先将之前的配置文件删除掉重新创建。
经过上面的 3 步之后才能创建一个不是中文乱码的 application. properies 文件,并且以后在创建 application. properies 不会出现中文乱码
1.3、读取配置文件
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 “${}” 的格式读取,如下代码所示
@Controller
public class UserController {@Value("${server.port}") // 读取配置项private String port;@ResponseBody@RequestMapping("/sayhi")public String sayhi() {return "hello, word —— port: " + port;}
}
访问 http://localhost:8080/sayhi,最终执行效果:hello, word —— port: 8080
@Component 在 Spring Boot 启动时候会注入到框架中,注入到框架中时会执行 @PostConstruct 初始化方法,这个时候就能读取到配置信息了
1.4、properties 缺点分析
读取多个配置文件:
properties 配置是以 key-value 的形式配置的
从上述配置key看出,properties 配置文件中会有很多的冗余的信息:
spring.datasource.username=root
spring.datasource.password=123
想要解决这个问题,就可以使用 yml 配置文件的格式化了
2、yml
2.1、yml 配置文件说明
-
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是 “另一种标记语言”
-
yml 是一个写法简单,可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,
-
支持更多的数据类型,可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
-
yml 最大的优势是可以跨语言,不止是 Java 中可以使用 golang、python 都可以使用 yaml 作为配置文件
2.2、yml 基本语法
yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使用英文冒汗加空格的方式组成的,其中的空格不可省略。
基础语法如下:
其中第一项的配置为正确的,key 也是高亮显示的,而第二项没有空格是错误的使用方式,第二项的key 也没有高亮显示
2.3、使用 yml 连接数据库
application.yml:
# 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=truename: rootpassword: 123
yml 和 properties 连接数据库的配置对比:
3、yml 使用进阶
3.1 yml 配置不同数据类型及 null
# 字符串
string.value: Hello# 布尔值,true或false
boolean.value: true
boolean.value1: false# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # 二进制# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法# Null,~代表null
null.value: ~
3.2、配置读取
yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:
@Component
public class ReadYml {@Value("${string.hello}")private String hello;@PostConstructpublic void postConstruct() {System.out.println("Read YML,Hello:" + hello);}
}
使用代码测试一下,读取值为 null 的配置和根本不存在的配置结果是否一致?
3.3、value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义
尝试在 application.yml 中配置如下信息:
mystring1: hello\nword
mystring2: 'hello\nword'
mystring3: "hello\nword"
读取程序实现代码如下:
@Controller
public class UserController {@Value("${mystring1}") // 读取配置项private String mystring1;@Value("${mystring2}")private String mystring2;@Value("${mystring3}")private String mystring3;@ResponseBody@RequestMapping("/sayhi")public String sayhi() {System.out.println("mystring1: " + mystring1);System.out.println("mystring2: " + mystring2);System.out.println("mystring3: " + mystring3);}
}
访问 http://localhost:8080/sayhi,执行结果:
如果在 mystring3 中加入转义符 \
:mystring3: "hello\\nword"
结果:mystring3: hello\nword
从上述结果可以看出:
- 字符串默认不用加上单引号或者双引号
- 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据
- 如果不加,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如\n -> \ ln(转义)处理
- yml 中如果使用了双引号就会按照(原)语义执行,双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
3.4、yml 对象配置和读取
——application.yml:
# 对象写法 1:
student:id: 1name: 张三age: 20# 对象写法 2:行内写法(与上面的写法作用一致)
student2: {id: 2,name: 李四,age: 20}
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解 @ConfigurationProperties
来读取 常见类 Student,具体实现如下:
@Data
中包含了 getter,setter,toString 等
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@ConfigurationProperties(prefix = "student") // 读取配置文件中的对象 在项目启动时读取
@Component // 不能省略
public class Student {private int id;private String name;private int age;
}
——调用类的实现如下:
@Controller
public class UserController {@Autowiredprivate Student student; // 属性注入@ResponseBody@RequestMapping("/sayhi")public String sayhi() {return "student: " + student;}
}
访问,执行效果:student: Student(id=1, name=张三, age=20)
读李四:修改Student 类:@ConfigurationProperties(prefix = “student2”)。
3.5、yml 配置集合
——application.yml:
# 集合写法 1:
dbtypes:
name:- mysql- sqlserver- db2# 集合写法 2:行内写法(与上面的写法作用一致)
dbtype: {name: [mysql,sqlserver,db2]}
——集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,创建类 ReadList 具体实现如下:
@Component
@Data
@ConfigurationProperties("dbtype") // 读取配置文件中的集合
public class ReadList {private List<String> name;
}
——打印类的实现如下:
@Controller
public class UserController {@Resourceprivate ReadList readList;@ResponseBody@RequestMapping("/sayhi")public String sayhi() {return "readList: " + readList.getName();}
}
访问,执行效果:readList: [mysql, sqlserver, db2]
4、properties VS yml 总结
properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略。
properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
yml 通用性更好,⽀持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置文件作为 Java 和 Go 的共同配置文件。
yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件
五、SpringBoot有几种读取配置文件的方法?
Spring Boot 中读取配置文件有以下 5 种方法:
-
使用@Value 读取配置文件
-
使用@ConfigurationProperties读取配置文件
-
使用Environment读取配置文件
-
使用@PropertySource 读取配置文件
使用@PropertySource 注解可以用来指定读取某个配置文件,比如指定读取application.properties配置文件的配置内容
@PropertySource 注解默认只支持 properties 格式配置文件的读取
@springBootApplication
@PropertySource( "classpath:application.properties", encoding="utf-8")
public class DemoApplication implements InitializingBean {@Value("${profile.name}")private string name;public static void main(String[ ] args) {SpringApplication.run(DemoApplication.class, args );}@Overridepublic void afterPropertiesSet( ) throws Exception {System.out.println("Name: " +name ) ;}
- 使用原生方式读取配置文件
相关文章:
SpringBoot 配置文件
一、配置文件作用 整个项目中所有重要的数据都是在配置文件中配置的,比如: 数据库的连接信息(包含用户名和密码的设置); 项目的启动端口; 第三方系统的调用秘钥等信息; 用于发现和定位问题的…...
【K8S】 deployment.yaml文件与Service yaml文件详解
目录 deployment.yaml文件详解Service yaml文件详解 deployment.yaml文件详解 apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata:name: cango-demo #Deployment名称namespace: cango-prd #命名空间l…...
GMSL 9296芯片对GMSL链路 插损/回损/线束要求
基于美信 9296的芯⽚ 对于GMSL信号链路上的需求如下: 1:插损 频段2M~3.5GHZ 在3G时需要⼩于-21db。通信速率 6Gbps/187Mbps 频段2M~3.5GHZ 在3G时需要⼩于-18db。通信速率 6Gbps/1.5Gbps 频段2M~2GHZ 在1.5G时需要⼩于-19.5db。通信速率 3Gbps/187Mbps …...
用库造一个list的轮子 【C++】
文章目录 list的模拟实现默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数 迭代器迭代器为什么要存在?const_iteratorbegin和end inserterasepush_back && pop_backpush_front &&pop_frontswap 完整代码 list的模拟实现 默认成员函数 构造…...
java中的,>>,<<位运算
目录 二进制 >>,<< & 二进制 计算机内部使用二进制计数 二进制:在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的,这一系统中,通常用两个不同的符号0(代表零)和…...
成功解决Android设备adb连接后显示device unauthorized
一、提出问题 在电脑通过USB连接新的Android设备,想要通过adb来进行一些操作时,却发现命令提示符上在输入下面命令后显示设备未授权的信息也就是"unauthorized" adb devices二、不可行的解决方案 有人提出的解决方案是打开Android设备的开发…...
初识mysql数据库之引入mysql客户端库
目录 一、下载第三方库 1. 准备工作 1. 使用mysql官网提供的库 2. yum源安装 二、测试第三方库是否可用 三、mysql常用接口介绍 1. 查看官方文档 2. 初始化 3. 关闭mysql 4. 连接mysql 5. 下达sql指令 四、一个简单的C客户端库连接mysql程序 1. 头文件 2. 初始化…...
勘探开发人工智能技术:机器学习(1)
0 提纲 2.1 什么是机器学习 2.2 不确定性 2.3 数据类型 2.4 分类、回归、聚类 2.5 分类问题的训练与测试 2.6 性能评价指标 1 什么是机器学习 对于西瓜这个抽象类来说,它具有“色泽”,“根蒂”,“敲声”三个属性: 通过观察这个…...
MySQL查看当前数据库视图-SQL语句
引言 查询语句为: show full tables where table_type 可查询当前数据库表 一,创建一个视图 # 创建视图 create view v_stu as # 视图内容(连接的一个表) select name from t_stu union all select tname from t_teach; 二&…...
Clickhouse 存储引擎
一、常用存储引擎分类 1.1 ReplacingMergeTree 这个引擎是在 MergeTree 的基础上,添加了”处理重复数据”的功能,该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。 特点: 1使用ORDERBY排序键作为判断重复的唯一键 2.数据的去重只会在合并…...
基于golang多消息队列中间件的封装nsq,rabbitmq,kafka
基于golang多消息队列中间件的封装nsq,rabbitmq,kafka 场景 在创建个人的公共方法库中有这样一个需求,就是不同的项目会用到不同的消息队列中间件,我的思路把所有的消息队列中间件进行封装一个消息队列接口(MQer)有两个方法一个…...
【第一阶段】kotlin的函数
函数头 fun main() {getMethod("zhangsan",22) }//kotlin语言默认是public,kotlin更规范,先有输入( getMethod(name:String,age:Int))再有输出(Int[返回值]) private fun getMethod(name:String,age:Int): Int{println("我叫…...
PAM安全配置-用户密码锁定策略
PAM是一个用于实现身份验证的模块化系统,可以在操作系统中的不同服务和应用程序中使用。 pam_faillock模块 pam_faillock模块用来实现账号锁定功能,它可以在一定的认证失败次数后锁定用户账号,防止暴力破解密码攻击。 常见选项 deny&…...
AndroidManifest.xml日常笔记
1 Bundle介绍 Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。 我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组…...
SpringBoot异步框架
参考:解剖SpringBoot异步线程池框架_哔哩哔哩_bilibili 1、 为什么要用异步框架,它解决什么问题? 在SpringBoot的日常开发中,一般都是同步调用的。但经常有特殊业务需要做异步来处理,例如:注册新用户&…...
导出LLaMA ChatGlm2等LLM模型为onnx
通过onnx模型可以在支持onnx推理的推理引擎上进行推理,从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖,获得更好的性能等优势。 这篇博客(大模型LLaMa及周边项目(二) - 知乎)进行…...
C++项目:在线五子棋对战网页版--匹配对战模块开发
玩家匹配是根据自己的天梯分数进行匹配的,而服务器中将玩家天梯分数分为三个档次: 1. 普通:天梯分数小于2000分 2. 高手:天梯分数介于2000~3000分之间 3. 大神:天梯分数大于3000分 当玩家进行对战匹配时,服…...
ssh 连接断开,正在执行的shell脚本也被中断了
背景 最近在训练chatGLM,一次训练经常要花掉近2个小时,但是由于网络不稳定,经常ssh莫名的断开,导致训练不得不重新开启,这就很浪费时间了 解决方案 下面教大家一种在后台执行命令的方案,即使你ssh连接断…...
UML 用例图,类图,时序图,活动图
UML之用例图,类图,时序图,活动图_用例图 时序图_siyan985的博客-CSDN博客 https://www.cnblogs.com/GumpYan/p/14734357.html 用例图与类图 - 简书...
Java 面试题2023
Java core JVM 1、JVM内存模型 2、JVM运行时内存分配 3、如何确定当前对象是个垃圾 4、GCrooot 包括哪些? 5、JVM对象头包含哪些部分 6、GC算法有哪些 7、JVM中类的加载机制 8、分代收集算法 9、JDK1.8 和 1.7做了哪些优化 10、内存泄漏和内存溢出有什么区别 11、J…...
【CSS3】CSS3 动画 ④ ( 使用动画制作地图热点图 )
文章目录 一、需求说明二、动画代码分析1、地图背景设置2、热点动画位置测量3、热点动画布局分析4、动画定义5、小圆点实现6、波纹效果盒子实现7、延迟动画设置 三、代码示例 一、需求说明 实现如下效果 , 在一张地图上 , 以某个位置为中心点 , 向四周发散 ; 核心 是实现 向四周…...
命令模式(Command)
命令模式是一种行为设计模式,可将一个请求封装为一个对象,用不同的请求将方法参数化,从而实现延迟请求执行或将其放入队列中或记录请求日志,以及支持可撤销操作。其别名为动作(Action)模式或事务(Transaction)模式。 Command is …...
Dapper 微型orm的光
介绍 Dapper是一个轻量级的ORM(对象关系映射)框架,它可以方便地将数据库查询结果映射到.NET对象上,同时也支持执行原生SQL查询。下面我将详细介绍Dapper的使用方法。 安装Dapper 首先,你需要通过NuGet包管理器将Dap…...
Mysql随心记--第一篇
MylSAM:查询速度快,有较好的索引优化和数据压缩技术,但是它不支持事务 InnoDB:它支持事务,并且提供行级的锁定,应用也相当广泛 docker ps -a --filter "ancestormysql" 查看linux中创建了多少个d…...
使用dockerfile安装各种服务组件
使用dockerfile安装各种服务组件 elasticsearch、minio、mongodb、nacos、redis 一、使用dockerfile安装elasticsearch:7.8.0 1、Dockerfile文件 FROM elasticsearch:7.8.0 #添加分词器 ADD elasticsearch-analysis-ik /usr/share/elasticsearch/plugins/elasticsearch-anal…...
如何简单的无人直播
环境搭建 ffmpeg安装,我这里用的是centos搭建的,其他平台可以自己百度 yum -y install wgetwget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xztar -xJf ffmpeg-4.0.3-64bit-static.ta…...
【基于HBase和ElasticSearch构建大数据实时检索项目】
基于HBase和ElasticSearch构建大数据实时检索项目 一、项目说明二、环境搭建三、编写程序四、测试流程 一、项目说明 利用HBase存储海量数据,解决海量数据存储和实时更新查询的问题;利用ElasticSearch作为HBase索引,加快大数据集中实时查询数…...
ProComponent 用法学习
相信很多同学都用过 Ant Design 这一 react 著名组件库,而 ProComponents 则是在 antd 之上进行封装的页面级组件库(指一个组件就可以搞定一个页面)。它同时也是 Ant Design Pro 中后台框架所用的主要组件库。如果你手上有要用 react 开发的中…...
巨人互动|Google海外户Google Analytics的优缺点是什么?
Google Analytics是一个由谷歌开发的网站分析工具,旨在帮助网站和移动应用程序运营者收集和分析数据,以更好地了解用户行为和改进业务。虽然Google Analytics具有许多优势,但也存在一些缺点。在本文中,我们将探讨Google Analytics…...
MySQL数据库的操作
MySQL 连接服务器 库的操作创建数据库数据库删除查看数据库进入数据库查看所在的数据库修改数据库显示创建语句查看连接情况 表的操作创建表查看数据库所有的表查看表的详细信息查看创建表时的详细信息删除表修改表名向表中插入数据在表结构中新增一列对表结构数据的修改删除表…...
武汉网站建设/如何在百度上发布自己的文章
功能描述: 系统UI,给人感觉非常好,体积小巧,速度快 该源码是适用用于应用系统后台模块的管理(可扩展至支持集中化的权限管理平台), 0.支持N级菜单导航,菜单显示方式支持目前支持2种模…...
霍山有没有做建网站的/seo线下培训班
计算机三级《网络技术》操作试题及答案2016参考答案与解析一、综合题1.【解题思路】该题考查的主要内容是给出IP地址和子网掩码,要求解出主机号、网络地址、广播地址、直接广播地址以及地址范围。主机号是将IP地址中网络位置0,主机位不变得到的ÿ…...
哈尔滨网站备案手续费/北京seo优化技术
说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果。实质上还是通过提交form表单来返回文件流的输出。分步实现逻辑:ajax请求服务器,访问数据库,根据查询到的数据生成一个数据文…...
惠阳网站设计开发/泉州关键词快速排名
前面几篇文章我们学习了线性回归的相关知识,今天我们学习逻辑回归。 一、介绍 逻辑回归是一个非常经典的机器学习算法,逻辑回归又称logistic回归分析,看到名字,大家是不是自然而然的认为这是一个回归模型? 其实不然…...
用户登录网站开发/网络营销工具
你可以进主板的BIOS里看看 SATA选项里的硬盘模式是不是AHCI模式 如果是就改成IDE应该就可以了 可能你装系统是没有加载AHCI驱动 而现在换电池导致主板BIOS设置里的硬盘模式还原成了AHCI模式开机在系统启动界面就会蓝屏或重启...
怎么跟网站建设公司谈/广州seo工作
接口测试面试题,接口自动化测试面试题(1) 根据网络资料,总结了以下一些常见的接口测试面试题: 为什么要做接口测试? 接口测试能发现哪些问题? 接口测试怎么测? 用什么工具测接口? We…...