SpringBoot配置文件的注入和读取

news2024/11/26 19:50:28

目录

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 有几种读取配置文件的方法? - 掘金


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux初阶】基础IO - 文件管理(深入理解文件描述符) | 重定向

文章目录 一、文件管理引入二、理解文件描述符三、文件描述符表四、文件描述符的分配规则五、重定向六、使用 dup2 系统调用实现重定向1.模拟实现 >&#xff08;输出&#xff09;2.模拟实现 >>&#xff08;追加&#xff09;3.模拟实现 <&#xff08;输入&#xff0…

【观察】浪潮信息:自研液环式真空CDU技术,将被动应对变为主动防御

毫无疑问&#xff0c;在“双碳”战略的大环境下&#xff0c;数据中心走向绿色低碳和可持续发展已成为“不可逆”的大趋势&#xff0c;特别是随着全国一体化大数据中心、新型数据中心等政策文件的出台、“东数西算”工程的正式启动&#xff0c;数据中心的建设规模和数量呈现出快…

老胡周刊QA微信机器人(基于ChatGPT)

背景 先做个介绍吧&#xff0c;老胡的信息周刊是我从2021-08-16创立的周刊&#xff0c;截止到目前(2023-05-29)将近两年时间&#xff0c;目前已经有92期周刊&#xff0c;中间基本没有断更过&#xff0c;一共发布资源统计如下&#xff1a; &#x1f3af; 项目 288&#x1f916; …

Ae:稳定运动

使用跟踪器 Tracker面板的稳定运动 Stabilize Motion功能&#xff0c;可通过手动添加和设置跟踪点来跟踪对象的运动&#xff0c;将获得的跟踪数据对图层本身进行反向变换&#xff0c;从而达到稳定画面的目的。 Ae菜单&#xff1a;窗口/跟踪器 Tracker 点击跟踪器面板上的“稳定…

长文教你如何正确使用ChatGPT提高学习效率!

最近 Chat GPT 很&#x1f525;&#xff0c;被大家评为无所不能的最强AI。据说&#xff0c;有百分之八十的留学生已经在用ChatGPT 来写作业了&#xff0c;因为ChatGPT真的是有问必答&#xff0c;光速回复&#xff0c;复制粘贴都没有它回答的快。 目录 Part.1 什么是ChatGPT&a…

驱动开发:内核读写内存浮点数

如前所述&#xff0c;在前几章内容中笔者简单介绍了内存读写的基本实现方式&#xff0c;这其中包括了CR3切换读写&#xff0c;MDL映射读写&#xff0c;内存拷贝读写&#xff0c;本章将在如前所述的读写函数进一步封装&#xff0c;并以此来实现驱动读写内存浮点数的目的。内存浮…

centos安装KVM

文章目录 一、centos安装KVM步骤 1. 检查硬件支持 2. 安装 KVM 相关软件包 3. 启动 libvirtd 服务 4. 设置 libvirtd 服务自启动 5. 验证 KVM 安装 二、出现问题的解决方法 1. 检查网络连接 2. 检查 DNS 解析 3. 检查软件源设置 4. 禁用 IPv6 前言 本篇主要介绍cen…

教育最大的失败,是普通家庭富养孩子

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 著名教育家马卡连柯曾说&#xff1a;“一切都给孩子&#xff0c;牺牲一切&#xff0c;甚至牺牲自己的幸福&#xff0c;这是父母给孩子最可怕的礼物。”前些天刷到一个挺扎心的视频&#xff0c;不知道算…

商业智能 (BI) 对企业中每个员工的 5 大好处

本文由葡萄城技术团队于博客园原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 众所周知&#xff0c;商业智能 (BI) 是探索企业数据价值的强大工具&#xff0c;能够帮助企业做出明智…

全网最全2W字-基于Java+SpringBoot+Vue+Element实现小区生活保障系统(建议收藏)

博主介绍&#xff1a;✌全网粉丝30W,CSDN特邀作者、博客专家、新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推…

破局35岁危机:技术人如何做好职业规划?

见字如面&#xff0c;我是军哥。 最近有一位读者工作 8 年了&#xff0c;后端做了 3 年&#xff0c;算法做了 5 年&#xff0c;换了 6/7 家公司&#xff0c;基本上每一家公司只干 1 年左右&#xff0c;换了 N 个行业&#xff0c;现在工作出现瓶颈&#xff0c;也不知道未来的路怎…

十、Git代码仓库

一、Git概述 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 二、Git常用命令 查看git配置 git config -l设置用户名和邮箱 git config --global u…

带电更换柱上变压器(综合不停电作业法)

一、现场复勘 1.核对工作线路双重名称、杆号及设备双重名称 2.检查杆身质量 3.检查线路装置是否符合带电作业要求 4.检查待更换变压器容量 满足旁路作业要求 5.检查气象条件 作业前进行湿度和风速的测量&#xff0c;风力大于5级或湿度大于80%时&#xff0c;不宜带电作业&…

开源“模仿”ChatGPT,居然效果行?UC伯克利论文,劝退,还是前进?

原创&#xff1a;谭婧ChatGPT 从“古”至今&#xff0c;AI的世界&#xff0c;是一个开源引领发展的世界。 虽然Stable Diffusion作为开源的图像生成模型&#xff0c;将图像生成提到了全新境界&#xff0c;但是ChatGPT的出现&#xff0c;似乎动摇了一些人的信念。 因为ChatGPT是…

16. Vue-element-template记住密码

Vue-element-template 记住密码 1. 在登录页面添加记住密码按钮 新增参数 rememberMe # resources/src/views/login/index.vueloginForm: {username: admin,password: 123456,rememberMe: false},添加复选框 # resources/src/views/login/index.vue<div style"margin-…

一、STM32开发环境的搭建(Keil+STM32CubeMX)

1、STM32开发环境所需的东西 (1)KeilMDK安装包。 (2)STM32CubeMX。 (3)Keil软件对应的单片机pack包。 (4)STM32Cube MCU包。 2、Keil简介及安装 略 3、CubeMX简介及安装 3.1、CubeMX简介 (1)STM32CubeMX是一种图形工具&#xff0c;通过分步过程可以非常轻松地配置STM3…

盘点!Instruction Tuning 时代的大模型(下)

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/617302168 Alpaca&#xff0c;ChatGLM 6B 等模型的效果可以接受&#xff0c;下文总结部分笔记&#xff0c;为训练自定义小型化&#xff08;7B&#xff09;模型提供点知识储备。 之前我们分享了LaM…

Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 我附近的、酒店竞排

文章目录 ⛄引言一、我附近的酒店⛅需求分析⚡源码编写 二、酒店竞价排名⌚需求分析⏰修改搜索业务 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中…

Maven安装与配置(图解)

Maven是一个基于 Java 的项目管理工具&#xff0c;因此最基本的要求是在计算机上安装 JDK。 Maven 对系统要求如下表&#xff1a; JDKJDK 7.0 及以上。内存没有最低要求。磁盘空间Maven 安装本身大约需要 10MB。除此之外&#xff0c;其他磁盘空间将用于本地 Maven 存储库。本地…

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-优化更新子节点

1. 前言 在上一篇文章中&#xff0c;我们介绍了当新的VNode与旧的oldVNode都是元素节点并且都包含子节点时&#xff0c;Vue对子节点是 先外层循环newChildren数组&#xff0c;再内层循环oldChildren数组&#xff0c;每循环外层newChildren数组里的一个子节点&#xff0c;就去…