SpringBoot配置文件的注入和读取

目录

1. 配置文件的作用

2. 两种配置文件的格式:

2.1 properties 基本语法:

2.1.1 写入

2.1.2 读取

执行原理

2.1.3 缺点分析

2.2 yml 基本语法:

2.2.1 写入(非对象)

2.2.3 配置对象

2.2.4 配置集合

多个配置文件



1. 配置文件的作用

        SpringBoot 是为了简化 Spring 的操作,提高 Spring 项目的开发效率,它将 Spring 的一系列组件及配置进行封装和自动调用,但一些重要配置还是需要我们手动配置的,例如数据库接口、账户密码、项目端口、异常日志等由开发环境所决定的信息。

2. 两种配置文件的格式:

        SpringBoot 配置文件有两种格式:.properties 和 .yml,二者的区别可以简单理解为:

        首先:二者的功能都是一样的,.properties 文件是最早期的文件格式, 也是SpringBoot 的默认文件,项目诞生之初就自带的,而 .yml 是后来为了提高效率而衍生出的另一种格式,它相对于前者更写法更简洁,功能更强大,但唯一的不足在于新手容易写错,工作中最常用的是 .yml格式。

        其次:这两种文件在一个项目中理论上可以同时存在,但一般开发不会这样使用,尽量统一使用一种,因为这两种文件都存在的情况下,框架会优先加载 properties 文件,另一方面统一有助于代码的读写。

        不管使用哪种配置文件,文件建立之初它们都是空白的,具体要配置哪些功能随着我们开发自行配置即可,配置同时又分为了 “写入配置文件” 和 “读取配置文件” 两步。        

2.1 properties 基本语法:

2.1.1 写入:

         properties 文件是键值对形式,key 和 value 之间用 “=” 连接:

#配置项目端口
server.port=8080

#配置数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1/3306/blog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=111111

2.1.2 读取:

        properties 文件的读取使用 @Value("${}") :        

@Controller
public class ReadProperties {
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct() {
        System.out.println("port -> " + port);
    }
}

执行效果:

执行原理:

        @Controller 将当前 Bean 存到容器中,在执行 @PostConstruct 方法时就可以读到配置信息;

2.1.3 缺点分析:

         像这样,properties 文件可能有时需要写多次冗余的内容,因此 yml 文件就解决了这点。

2.2 yml 基本语法:

        yml文件需要先手动创建:

2.2.1 写入(非对象):

        yml 是树形配置文件,语法格式为:key: value观察颜色,冒号和 value 之间是有空格的,这就是容易写错的地方。如果在书写时格式正确,key: 也会自动高亮。

#配置项目端口
server:
  port: 8080

#配置数据库连接
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf8
    username: root
    password: 111111

各种类型的写法:其实 yml不仅是一种文件,还是一种配置语言,因此其支持更广泛的数据类型。

#整数
int.value1: 1
int.value2: 2
int.value3: 3

#浮点数
float.value1: 3.1415
float.value2: 1.69

#字符串
string.value: hello world

#布尔值
boolean.value1: true
boolean.value2: false

# null值,yml 的 null 代表什么都是也代表什么都不是
null.value: ~

注意点:字符串加单/双引号前后含义不同:

#特殊的字符串
string:
    none: hello /n world
    single: 'hello \n world'
    doub: "hello \n world"
@Controller
public class ReadYmlStr {
    @Value("${string.none}")
    private String none;

    @Value("${string.single}")
    private String single;

    @Value("${string.doub}")
    private String doub;

    @PostConstruct
    public void postConstruct() {
        System.out.println("不加引号:" + none);
        System.out.println("加单引号:" + single);
        System.out.println("加双引号:" + doub);
    }
}

  • 字符串默认不加引号;
  • 加单引号,会转义特殊字符为普通字符;
  • 加双引号,不会转义特殊字符;

2.2.2 读取:

        yml 的读取和 properties 一样,也是通过 @Value("${}") 实现:

@Controller
public class ReadYml {
    @Value("${int.value1}")
    private int num;

    @Value("${string.value}")
    private String str;

    @Value("${boolean.value1}")
    private boolean ans;

    @PostConstruct
    public void postConstruct() {
        System.out.println("从Yml里拿到的num为:" + num);
        System.out.println("从Yml里拿到的str为:" + str);
        System.out.println("从Yml里拿到的ans为:" + ans);
    }
}

2.2.3 配置对象:

写入对象:

        写入对象的语法有两种:①普通的,按照yml格式写;②行内样式写法;

①yml 格式:

student:
  id: 020304
  name: 张三
  age: 18

②行内样式:

teacher: {id: 1, name: 张红, age: 25}

接着需要在对象依赖的类里加入注解:@ConfigurationProperties("")

另外一定不能缺少对象的 Getter() 和 Setter() 方法,这里只能借助 lombok注解简化了代码

// 关键注解是第一句,中间三个注解是 lombok 的注解,
// Getter 和 Setter 相关方法不能少
@ConfigurationProperties("student")
@Getter
@Setter
@ToString
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

读取对象:读取没有特殊的,还是要通过 @Autowired 属性注入的方式:

@Component
public class ReadObjects {
    @Autowired
    private Student student;

    @PostConstruct
    public void postConstruct() {
        System.out.println(student);
    }
}

2.2.4 配置集合:

写入:

写入也有两种格式:

①普通yml格式:

dogtypes:
  dogsName:
    - 泰迪
    - 比熊
    - 博美
    - 爱斯基摩
    - 哈士奇
    - 边牧
    - 萨摩耶
@ConfigurationProperties("dogtypes")
@Getter
@Setter
@ToString
@Component
public class ListConfig {
    private List<String> dogsName;
}

②行内样式:

cattypes: {catsName: [中华田园猫,英短,加菲,布偶,金吉拉]}
@ConfigurationProperties("cattypes")
@Getter
@Setter
@ToString
@Component
public class ListConfig2 {
    private List<String> catsName;
}

读取:

@Component
public class ReadList {
    @Autowired
    private ListConfig listConfig;

    @PostConstruct
    public void postConstruct() {
        System.out.println(listConfig.getDogsName());
    }
}


多个配置文件:

        开发分了很多环境:开发环境、测试环境等,还可以分得更细,对于不同环境可以配置不同的配置文件,但前提是要有一个总配置文件;

        一般总配置文件命名为:application.yml;其他配置文件根据环境命名;

        主配置文件可以调用子配置文件:

 

关于更多 SpringBoot 读取配置文件等操作:面试突击75:SpringBoot 有几种读取配置文件的方法? - 掘金


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

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

相关文章

Python爬虫

爬虫流程 爬虫流程&#xff1a;获取网页内容 --> 解析网页内容 --> 储存或分析数据 爬虫规则&#xff1a; 1、不要爬取公民隐私数据 2、不要爬取受著作保护的内容 3、不要爬取国家事务、国防建设、尖端科学计数领域的计算机系统等 4、请求数量和频率不能太高&…

MOTOTRBO CPS2.0安装与写频流程

一、安装MOTOTRBO CPS2.0写频软件 安装MOTOTRBO CPS2.0写频软件&#xff0c;选择安装软件的电脑系统必须WIN7以上 1.解压CPS2_2.21.61.0.zip至当前文件内 2. 双击MOTOTRBO_CPS_2.0.exe安装文件 3. 选择安装语言中文&#xff08;简体&#xff09;&#xff0c;点击确定 4.点击下一…

「实在RPA·人社数字员工」促进人力社保数字办公战略转型

一、人力社保部门数字化转型的重要性 伴随着国家放宽人力资源市场准入条例&#xff0c;多次出台相关扶持政策&#xff0c;市场竞争加剧&#xff0c;后疫情时代格局的大变局&#xff0c;如何提高服务质量和效率&#xff0c;如何降本增效&#xff0c;成为人力资源和社会保障行业…

Educational Codeforces Round 139 (Rated for Div. 2)

Educational Codeforces Round 139 (Rated for Div. 2) Problem - 1766E - Codeforces 显然我们可以把0序列的贡献单独算: i*(n-i1) 考虑只存在1,2,3的情况. 首先通过&#xff0c;观察到一个重要性质: 最多只有三种序列. 含有3或纯1或纯2型.纯1或纯2型纯2或纯1型 我们每次添加…

hugging face开源的transformers模型可快速搭建图片分类任务

2017年,谷歌团队在论文「Attention Is All You Need」提出了创新模型,其应用于NLP领域架构Transformer模型。从模型发布至今,transformer模型风靡微软、谷歌、Meta等大型科技公司。且目前有模型大一统的趋势,现在transformer 模型不仅风靡整个NLP领域,且随着VIT SWIN等变体…

什么是高性能计算实习生?做高性能计算有前景吗?

随着大模型和算力时代的大火&#xff0c;高性能计算实习的岗位越来越多了&#xff0c;各个大厂都在码人&#xff0c;百度、小米、字节、华为等等&#xff0c;也有很多网友晒出了面试一众知名芯片企业的面经和笔试题。 但是依然有很多朋友不清楚什么是高性能计算实习生&#xf…

YOLOv5白皮书-第Y4周:common.py文件解读

目录 0.导入需要的包和基本配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要类2.1 非极大值抑制&#xff08;NMS&#xff09;2.2 AutoShape2.3 Detections2.4 Classify &#x1f368; 本文为&am…

掌握了它,软件测试拿下25K轻轻松松!

了解软件测试这行的人都清楚&#xff0c;功能测试的天花板可能也就15k左右&#xff0c;而自动化的起点就在15k左右&#xff0c;当然两个岗位需要掌握的技能肯定是不一样的。 如果刚入门学习完软件测试&#xff0c;那么基本薪资会在7-8k左右&#xff0c;这个薪资不太高主要是因…

STM8、STM8S003F3P6 实现PWM控制电机HAS10227

背景 有个项目需要控制一台风机的转速&#xff0c;使用STM8S003F3P6 输出PWM控制&#xff0c;这里就详细记录一下调试记录 原理图 原理图比较简单&#xff0c;电机接口CN3 电机接口原理图 与MCU管脚连接位置如下图 首先我们要明白电机的原理 电机 简单来说就是 实现电能与…

锁的内存语义

锁的释放和获取的内存语义 操作锁的释放和获取的内存语义类比volatile对锁释放和锁获取的内存语义做个总结当线程 释放锁 时JMM会把该线程对应的本地内存中的共享变量刷新到主内存中锁释放与 volatile写 有相同的内存语义线程A释放一个锁&#xff0c;实质上是线程A向接下来将…

功率信号源的使用方法有哪些

功率信号源是一种常见的电子设备&#xff0c;主要用于产生各种功率信号&#xff0c;例如直流信号、正弦信号等。功率信号源广泛应用于工业、科研、医疗等领域&#xff0c;例如电机驱动、电子仪器仪表、医疗设备等。本文将详细介绍功率信号源的使用方法和注意事项。 图&#xff…

WMS仓储管理系统解决方案能帮助电子企业解决哪些问题

WMS仓储管理系统解决方案是一种针对仓库管理的软件系统&#xff0c;它能够有效地解决电子企业在仓储管理方面的问题。在电子行业&#xff0c;由于产品的生命周期较短&#xff0c;且需求变化快速&#xff0c;WMS仓库管理系统的应用对于电子企业的管理有着重要的意义。本文将探讨…

【MySQL】MySql的底层数据结构

文章目录 前言索引结构及查找算法不适合做MySql的数据结构及其原因 一、BTree和BTree的引出1.1 BTree数据结构2.2 BTree数据结构 二、计算m阶&#xff0c;即BTree该取多少合适总结 前言 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢&#xff1f;又是怎么去查找…

华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)

华为云HECS云服务器即云耀云服务器&#xff0c;类似于阿里云和腾讯云的轻量应用服务器&#xff0c;HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月&#xff0c;华为云百科分享华为云HECS云服务器租用费用及CPU性能详解&#xff1a; 目录 华为云…

《数据库应用系统实践》------ 包裹信息管理系统

系列文章 《数据库应用系统实践》------ 包裹信息管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝&#xff1f; 1.浅拷贝&#xff08;浅复制&#xff09; //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

解说天下之操作系统

解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn)&#xff0c;云晶&#xff08;https://www.yunjingxz.com&#xff09;创始人根据多年从业经验&#xff0c; 从操作系统的起源&#xff0c;应用分类&#xff0c; 设计分类&#xff0c;以及资源使用角度对操作系统进…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

思维导图到底有多少种?

思维导图是一种非常实用的工具&#xff0c;它可以帮助我们更好地组织和表达我们的思想。在日常生活和工作中&#xff0c;我们可以使用各种不同类型的思维导图来解决不同的问题。下面&#xff0c;我将介绍一些常见的思维导图类型以及如何使用ProcessOn思维导图软件制作思维导图。…

ThreadLocal的应用

1. ThreadLocal 是什么 JDK 对ThreadLocal的描述为&#xff1a; 此类提供线程局部变量。这些变量与普通变量的不同之处在于&#xff0c;每个访问一个变量的线程&#xff08;通过其get或set方法&#xff09;都有自己的、独立初始化的变量副本。ThreadLocal 实例通常是类中的私有…