【Spring】SpringBoot配置文件

文章目录

  • 1. 配置文件格式
  • 2. properties 配置⽂件说明
    • 2.1 properties 基本语法
    • 2.2 读取配置文件
    • 2.3 properties 缺点分析
  • 3. yml 配置文件说明
    • 3.1 yml 基本语法
    • 3.2 读取配置文件
    • 3.3 @PostConstruct 注解
    • 3.4 配置null和空格
    • 3.5 value值加单双引号
    • 3.6 配置对象
    • 3.7 配置集合
    • 3.8 配置Map
    • 3.9 yml优缺点

1. 配置文件格式

有下面三种:

  • application.properties
  • application.yml
  • application.yaml

其中yml是yaml的简写,两者使用方式一样,开发中yml形式用的较多。
当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml ⽂件。
Spring项目创建时,会自动生成一个application.properties 文件,可以使用这个,也可以自己创建其他类型配置文件。
在这里插入图片描述
注意
1.理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以.properties 为主, 也就是.properties 优先级更⾼。
2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

2. properties 配置⽂件说明

2.1 properties 基本语法

#配置端口号
server.port = 9090
#配置数据库连接信息
spring.datasource.url=spring.datasource.url=jdbc:mysql://127.0.0.1:3306/book?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

如上面代码格式,properties是以键值对形式配置的,key和value直接通过 = 连接。
注释通过#。

2.2 读取配置文件

配置文件:

#自定义配置
demo.key1 = hello,properties
@RestController
public class PropertiesController {@Value("${demo.key1}")private String key1;@RequestMapping("/readKey")public String readKey(){return key1;}
}

如上面代码,如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤" ${} "的格式读取。
执行效果:
云
如果去掉注解中 $,就会变成一个普通的赋值。
在这里插入图片描述
在这里插入图片描述

2.3 properties 缺点分析

在这里插入图片描述
如图,可以发现在配置一些文件时,代码的会有很多冗余。
这时就可以使用yml配置文件进行简化。

3. yml 配置文件说明

3.1 yml 基本语法

#配置端口号
server:port: 9090
#配置数据库连接信息
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/book?characterEncoding=utf8&useSSL=falseusername: rootpassword: root

yml用: 代替了=,每个: 后必须有个空格后才能跟配置代码,不然无法生效。

3.2 读取配置文件

配置代码:

demo:key: hello,yml
@RestController
public class YmlController {@Value("${demo.key}")private String key;@RequestMapping("/readYml")public String readKey(){return key;}
}

读取规则和properties中相同,主要是yml文件中代码规则。
执行效果:
在这里插入图片描述

3.3 @PostConstruct 注解

@PostConstruct注解是Java中的一种注解,它用于在依赖注入完成后执行初始化方法。当一个Bean被创建并且所有的属性被赋值之后,该注解标注的方法会被自动调用。这样可以确保Bean在使用之前被正确初始化。
在这里插入图片描述
执行结果:
在这里插入图片描述
这样在验证一些Bean时就不用在浏览器频繁验证。
注意

  1. @PostConstruct注解的方法在同一个类中可以有多个。
  2. @PostConstruct注解的方法必须是非静态的,否则会报错。
  3. @PostConstruct注解的方法可以没有参数,也可以有参数,参数类型不限。
  4. @PostConstruct注解的方法必须是没有返回值的,包括void类型。

3.4 配置null和空格

这里是引用
执行验证:
在这里插入图片描述

3.5 value值加单双引号

demo:str1: Hello \n Springstr2: 'Hello \n Spring'str3: "Hello \n Spring"

在这里插入图片描述
执行结果并不同。
结论

  • 字符串默认不⽤加上单引号或者双引号。
  • 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串。
  • 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义。

3.6 配置对象

对象Student:

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

配置对象:

# 配置对象
student:age: 18name: zhangsansex: nan

执行结果:在这里插入图片描述
在对象代码中我们需要使用@ConfigurationProperties注解读取。
格式如下:
@ConfigurationProperties(prefix = "student")

3.7 配置集合

对象代码:

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

配置代码:

# 配置集合
dbtypes:name:- chen- zhang- qian

执行结果:
在这里插入图片描述
集合读取和对象一样,但是配置文件中,集合中的元素要使用- 隔开,-后面有一个空格,如果没有空格,将变成一个元素。
读取对象也可以使用其他集合接受,也可以使用String[]等。

3.8 配置Map

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对象读取使用Map即可。

3.9 yml优缺点

优点:

  1. 可读性⾼,写法简单, 易于理解。
  2. ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态。
  3. ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤。
    缺点:
  4. 不适合写复杂的配置⽂件。
  5. 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)。

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

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

相关文章

环形链表解析(c语言)c语言版本!自我解析(看了必会)

目录 1.判断一个表是否是环形链表&#xff01; 代码如下 解析如下 2.快指针的步数和慢指针的步数有什么影响&#xff08;无图解析&#xff09; 3.怎么找到环形链表的入环点 代码如下 解析如下 1.判断一个表是否是环形链表&#xff01; 代码如下 bool hasCycle(struct L…

Leetcode—69.x的平方根【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—69.x的平方根 直接法实现代码 int mySqrt(int x) {long long i 0;while(i * i < x) {i;}if(i * i > x) {return i - 1;}return i; }运行结果 二分法实现代码 int mySqrt(int x) {long long left 0, right (l…

自动化测试(Java+eclipse)教程

webdriver环境配置 1.下载chromedriver到本地&#xff08;一定要选择和自己浏览器相对应的版本chromedriver下载地址&#xff09; 2.加入到环境变量path中 webdriver工作原理 创建web自动化测试脚本 1.Maven项目创建 File->New->project->(搜索maven)选择maven pr…

功能案例 -- 通过开关,改变白天和黑夜

效果展示 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>:root {--default-bac-color: #f…

会员题-力扣408-有效单词缩写

有效单词缩写 字符串可以用 缩写 进行表示&#xff0c;缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如&#xff0c;字符串 “substitution” 可以缩写为&#xff08;不止这几种方法&#xff09;&#xff1a; “s10n” (“s ubstitutio n”) “sub4…

基于STM32单片机抢答器设计

**单片机设计介绍&#xff0c; 基于STM32单片机抢答器设计-Proteus仿真 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于STM32单片机的抢答器设计可以用于教育和培训场景中的抢答游戏或考试环节。以下是一个基本的介绍设计步骤…

手摸手入门Springboot+Grafana10.2接收JSON

JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;是一种轻量级的数据交换格式。它基于 ECMAScript&#xff08;European Computer Manufacturers Association, 欧洲计算机协会制定的js规范&#xff09;的一个子集&#xff0c;采用完全独立于编程语言的文本…

2013年108计网

第33题 在 OSI 参考模型中, 下列功能需由应用层的相邻层实现的是()A. 对话管理B. 数据格式转换C. 路由选择D. 可靠数据传输 很显然&#xff0c;题目所问的应用层的相邻层是表示层。该层实现与数据表示相关的功能。选项a中的对话管理属于会话层。选项c中的路由选择属于网络层。…

Maven Profile组设置

application.properties中xxxx

统一消息分发中心设计

背景 我们核心业务中订单完成时&#xff0c;需要完成后续的连带业务&#xff0c;扣件库存库存、增加积分、通知商家等。 如下图的架构&#xff1a; 这样设计出来导致我们的核心业务和其他业务耦合&#xff0c;每次新增连带业务或者去掉连带业务都需要修改核心业务。 一方面&…

UPLAOD-LABS2

less7 任务 拿到一个shell服务器 提示 禁止上传所有可以解析的后缀 发现所有可以解析的后缀都被禁了 查看一下源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists($UPLOAD_ADDR)) {$deny_ext array(".php",".php5&quo…

网络安全深入学习第八课——反向代理(工具:frp)

文章目录 一、实验环境二、实验要求三、开始模拟1、攻击机配置frp文件2、攻击拿下跳板机&#xff0c;并且上传frpc.ini、frpc.exe、frpc_full.ini文件3、把frps.ini、、frps.exe、frps_full.ini文件放到VPS主机上4、VPS机开启frp5、跳板机开启frp6、验证 一、实验环境 攻击机&…

numpy 基础使用

NumPy是Python中科学计算的基础包。它是一个Python库&#xff0c;提供多维数组对象&#xff0c;各种派生对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;以及用于数组快速操作的各种API&#xff0c;有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变…

Typescript -尚硅谷

基础 1.ts是以js为基础构建的语言&#xff0c;是一个js的超集(对js进行了扩展)&#xff1b; 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言&#xff0c;ts的类型是针对于变量而言 Ts可以被编译成任意版本的js&#xff0c;从而进一步解决了…

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一半&#…

upload-labs12-21关

第十二关 提示及源码 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES…

uniapp——项目02

分类 创建cate分支 渲染分类页面的基本结构 效果页面,包含左右两个滑动区. 利用提供的api获取当前设备的信息。用来计算窗口高度。可食用高度就是屏幕高度减去上下导航栏的高度。 最终效果: 每一个激活项都特殊背景色&#xff0c;又在尾部加了个红条一样的东西。 export d…

关于Maven中pom.xml文件不报错但无法导包解决方法

问题 我的pom文件没有报红&#xff0c;但是依赖无法正常导入。 右下角还总出现这种问题。 点开查看报错日志。大致如下 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V no…

MySQL最新2023年面试题及答案,汇总版(4)【MySQL最新2023年面试题及答案,汇总版-第三十四刊】

文章目录 MySQL最新2023年面试题及答案&#xff0c;汇总版(4)01、一个6亿的表a&#xff0c;一个3亿的表b&#xff0c;通过外键tid关联&#xff0c;你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录&#xff1f;02、SQL语句优化的一些方法有哪些&#xff1f;03…

射频功率放大器应用中GaN HEMT的表面电势模型

标题&#xff1a;A surface-potential based model for GaN HEMTs in RF power amplifier applications 来源&#xff1a;IEEE IEDM 2010 本文中的任何第一人称都为论文的直译 摘要&#xff1a;我们提出了第一个基于表面电位的射频GaN HEMTs紧凑模型&#xff0c;并将我们的工…