SpringBoot配置文件(properties yml)

news/2024/4/19 5:34:31/文章来源:https://blog.csdn.net/crazy_xieyi/article/details/129165690

查看官网更多系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

1.配置⽂件作⽤

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:数据库的连接信息(包含⽤户名和密码的设置);项⽬的启动端⼝;第三⽅系统的调⽤秘钥等信息;⽤于发现和定位问题的普通⽇志和异常⽇志等。

如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的。

2.配置文件的分类:

1、系统的配置文件,比如连接字符串、比如日志的相关设置,系统定义好的。

2、用户自定义的。

3.配置文件的格式:

Spring Boot 配置⽂件主要分为以下两种格式:

.properties

.yml

如下图所示:

其中properties 类型的配置⽂件就属于⽼款,也是创建 Spring Boot 项⽬时默认的⽂件格式,⽽ yml 属于新版款式。理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项⽬中时,如果配置⽂件中出现了同样的配置,⽐如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载完.properties ⽂件之后,也会加载 .yml ⽂件的配置信息。 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

4.为配置⽂件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项⽬了,并且 yml 的配置⽂件就有提示了。但默认情况下是不⽀持 properties 格式的⽇志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。

5.properties 配置文件的基本语法

Key=Value格式,properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

6.关于properies 中文乱码的问题处理:

将原来的application. properies删除掉,重新再创建一个application. properies。因为之前的配置文件已经是不支持中文编码的文件格式化,设置编码再创建application.properies 之后,所以后设置的编码不会改变原来的旧的 application.properies文件,所以需要先将之前的配置文件删除掉重新创建。

7.读取单个的配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。@Value 注解使⽤“${}”的格式读取,如下代码所示:

@Component 
public class Read { @Value("${server.port}") private String port; @PostConstruct public void postConstruct() { System.out.println("port:" + port); } 
}

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct 初始化⽅法,这个时候就能读取到配置信息了。

8.properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下所示:

Spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false;
Spring.datasource.name=root
Spring.datasource.password=1234

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息。想要解决这个问题,就可以使⽤yml 配置⽂件的格式化了。

9.yml 配置⽂件特点以及语法

特点:写法简单,可读性更高;支持更多的数据类型;可以跨语言使用,java/golang/python等等

语法:key: value;key和value之间用冒号+空格连接。

spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=falsename: rootPassword: 1234

10.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: ~

11.yml单、双引号的问题:

yml 中如果使用了双引号就会按照(原〉语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如n -> \\n(转义)处理。

12.yml配置读取

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可。

13.yml配置对象

以在 yml 中配置对象:

student: id: 1 name: Java age: 18# 或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
student: {id: 1,name: Java,age: 18} 

这个时候就不能⽤@Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:

@ConfigurationProperties(prefix = "student") 
@Component 
@Data
public class StudentComponent { private int id; private String name; private int age; 
}

调⽤类的实现如下:

@Component 
public class ReadYml2 { @Autowired private StudentComponent studentComponent; @PostConstruct public void postConstruct() { System.out.println(studentComponent); } 
} 

14.yml配置集合

配置⽂件也可以配置 list 集合,如下所示:

dbtypes: 
name: - mysql - sqlserver - db2
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致): 
dbtypes: {name: [mysql,sqlserver,db2]} 

集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

@Component 
@ConfigurationProperties("dbtypes") 
@Data 
public class ListConfig { private List<String> name; 
} 

调⽤类的实现如下:

@Component 
public class ReadYml2 { @Autowired private ListConfig listConfig; @PostConstruct public void postConstruct() { System.out.println(listConfig.getName());
}
}

查看更多系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

properties & yml 总结

properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂

冒号加空格的⽅式设置,并且空格不可省略。

properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的

解决数据冗余的问题。

yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份

配置⽂件作为 Java 和 Go 的共同配置⽂件。

yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。

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

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

相关文章

怎么把音乐传到苹果手机上?如何将铃声导入iphone

很多人肯定都有这样的经验—比起电脑&#xff0c;使用iPhone和iPad播放音乐能获得更好的声音体验。 因此&#xff0c;现在有越来越多的用户将音乐传输到iPhone/iPad上播放。怎么把音乐传到苹果手机上&#xff1f;把音乐导入苹果手机&#xff0c;主要有2种方法&#xff1a;一种是…

vue中的百度地图的搜索定位功能

效果图 申请百度地图AK 前往 百度地图开放平台控制台 &#xff0c;登录百度账号&#xff0c;创建应用即得。 封装loadBMap.js文件 /*** 动态加载百度地图api函数* param {String} ak 百度地图AK&#xff0c;必传*/ export default function loadBMap(ak) {return new Promise…

Python曲线肘部点检测-膝部点自动检测

文章目录一. 术语解释二. 拐点检测肘部法则是经常使用的法则。很多时候&#xff0c;可以凭人工经验去找最优拐点&#xff0c;但有时需要自动寻找拐点。最近解决了一下这个问题&#xff0c;希望对各位有用。一. 术语解释 **肘形曲线(elbow curve)**类似人胳膊状的曲线&#xff…

【ArcGIS Pro二次开发】(10):属性表字段(field)的修改

在ArcGIS Pro中&#xff0c;经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。 一、要实现的功能 如上图所示的要素图层&#xff0c;要实现如下功能&#xff1a; 当字段【市级行政区】的值为【泉州市】时&#xff0c;将…

服务网格领域的百花齐放

服务网格是一种技术架构&#xff0c;它用于管理微服务系统中各个服务之间的通信&#xff0c;旨在处理微服务间的流量&#xff08;也称为东西向流量&#xff09;。 ​ 在云原生应用中&#xff0c;一个应用的背后可能存在着成百上千个服务&#xff0c;各个服务可能又有着若干个实…

【论文速递】EMNLP 2020 - 将事件抽取作为机器阅读理解任务

【论文速递】EMNLP 2020 - 将事件抽取作为机器阅读理解任务 【论文原文】&#xff1a;Event Extraction as Machine Reading Comprehension 【作者信息】&#xff1a;Jian Liu and Yubo Chen and Kang Liu and Wei Bi and Xiaojiang Liu 论文&#xff1a;https://aclantholo…

[音视频] wav 格式

wav 格式结构 WAV文件遵循RIFF规则&#xff0c;其内容以区块&#xff08;chunk&#xff09;为最小单位进行存储。WAV文件一般由3个区块组成&#xff1a;RIFF chunk、Format chunk和Data chunk。另外&#xff0c;文件中还可能包含一些可选的区块&#xff0c;如&#xff1a;Fact…

算法leetcode|38. 外观数列(多语言实现)

文章目录38. 外观数列&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgocpythonjava38. 外观数列&#xff1a; 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字…

异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2&#xff0c;axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名最后说一句1,Ajax 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 Jav…

C语言--指针进阶2

目录前言函数指针函数指针数组指向函数指针数组的指针回调函数前言 本篇文章我们将继续学习指针进阶的有关内容 函数指针 我们依然用类比的方法1来理解函数指针这一全新的概念&#xff0c;如图1 我们用一段代码来验证一下&#xff1a; int Add(int x, int y) {return xy;…

少走弯路,来自HR自动化实践者5条忠告 | RPA铺第4期

安东尼与巴克利共同撰写的《“无人力”的人力资源&#xff1f;自动化、人工智能及机器学习时代的产业演变》一书中指出&#xff0c;到2030年&#xff0c;全球8.5%的制造业劳动力&#xff08;约2000万工人&#xff09;将会被自动化机器人取代。 因自动化、人工智能、机器学习带…

大数据之Phoenix基本介绍

文章目录前言一、Phoenix简介二、Phoenix入门&#xff08;一&#xff09;创建表语法&#xff08;二&#xff09;查看表信息&#xff08;三&#xff09;删除表&#xff08;四&#xff09;大小写问题前言 #博学谷IT学习技术支持# 上篇文章介绍了Phoenix环境搭建&#xff0c;点击…

【C语言进阶】指针与数组、转移表详解

前言 大家好我是程序猿爱打拳&#xff0c;我们在学习完指针的基本概念后知道了指针就是地址&#xff0c;我们可以通过这个地址并对它进行解引用从而改变一些数据。但只学习指针的基础是完全不够的&#xff0c;因此学习完指针的基础后我们可以学习关于指针的进阶&#xff0c;其中…

计算机网络高频知识点(一)

目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…

线上研讨会报名 | Perforce、中手游、星思半导体专家邀您一起畅聊如何通过数字资产管理与版本控制赋能大规模研发

全球领先的数字资产管理与DevSecOps工具厂商Perforce联合中国授权合作伙伴龙智举办的Perforce on Tour网络研讨会将于2月28日下午2:00举行。 本次研讨会以“赋能‘大’研发&#xff0c;助力‘快’交付”为主题&#xff0c;龙智董事长何明、Perforce高级顾问Robert Cowham&…

Spring中的FactoryBean 和 BeanFactory、BeanPostProcessor 和BeanFactoryPostProcessor解析

文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝&#xff0c;定义了容器的⼀些基础⾏为&#xff0c;负责⽣产和管理Bean的…

2.26selenium常用api

一.等待1.线程强制等待Thread.sleep()2.隐式等待driver.manage().timeouts().implicitlyWait(Duration.ofSeconds())3.显式等待WebDriverWait foo new WebDriverWait(driver,Duration.ofSeconds(10));foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector()…

Spring Boot整合Kaptcha实现验证码功能

目录一、前言1.Kaptcha 简介2.Kaptcha 详细配置表二、实现1.整合kaptcha&#xff0c;创建kaptcha的工具类1.1 添加依赖1.2 创建KaptchaConfig工具类2 编写接口&#xff0c;在接口中使用 kaptcha 工具类来生成验证码图片&#xff08;验证码信息&#xff09;并返回3 登录时从sess…

特斯拉4D雷达方案首次曝光!高阶智驾市场比拼安全冗余

随着L2级智能驾驶进入普及阶段&#xff0c;L3/L4级赛道正在成为各家车企的下一个竞争焦点。背后的最大难题&#xff0c;就是如何在成本可控的前提下&#xff0c;保证足够的安全。 高工智能汽车研究院监测数据显示&#xff0c;2022年度中国市场&#xff08;不含进出口&#xff…

Nginx搭建域名访问(负载均衡到网关)

1.修改Nginx总配置 配置上游服务器 多个网关换行 2.修改Nginx服务的配置 直接代理到上游服务&#xff08;网关&#xff09; 页面给Nginx发送请求&#xff0c;带Host&#xff0c;但是Nginx给网关转的时候会丢掉Host&#xff0c;所以要单独配上 3.修改网关微服务配置 安装ho…