Spring Boot 项目配置文件

news2025/1/17 18:06:44

文章目录

  • 配置文件的作用
  • properties
    • 基本语法
    • 读取文件信息
    • 缺点
  • yml
    • 基本语法
    • 优点
    • 配置不同数据类型
      • 字符串类型的写法
    • 配置对象
    • 配置集合
  • 读取配置文件的几种方法
    • Environment
    • @PropertySource
    • 使用原生方式读取
  • 设置不同环境的配置文件

配置文件的作用

整个项目中重要的数据都是在配置文件中配置的,例如:

  1. 数据库的连接信息(包含连接主机、用户名和密码的设置);
  2. 项目的启动端⼝;
  3. 第三方系统的调用秘钥等信息;
  4. 发现和定位问题的普通日志和异常日志等

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

  1. .properties
  2. .yml

配置文件都是放在:/src/main/resources中的,默认的 Spring Boot 项目生产的是 .properties 格式的配置文件,.yml 格式文件需要自己手动创建

image-20240127174835923

注意事项:

  1. properties 可以和 yml ⼀起存在于⼀个项目当中,但是如果两个配置文件中出现了同样的配置那么会以 properties 中的配置为主,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。
  2. properties 配置文件是 Spring Boot 项目的默认配置文件

properties

基本语法

properties 是以键值的形式配置的,key 和 value 之间以 “=” 连接。

# 注释
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding= utf8 
spring.datasource.username=root 
spring.datasource.password=root

读取文件信息

在项目中想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/* @Component 在 Spring Boot 启动时候会注入到框架中
	注⼊到框架中时会执⾏ @PostConstruct初始化⽅法
	读取配置文件信息
*/

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

    @PostConstruct
    public void postConstruct() {
        System.out.println("Read properties: port: " + port);
    }
}

image-20240127175626724

缺点

例如下面的配置信息中:

# 注释
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding= utf8 
spring.datasource.username=root 
spring.datasource.password=root

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,出现了很多次的 spring.datasource.

这样写起来就很麻烦,代码也不好看,这时候旧的考虑 yml 配置文件了

yml

基本语法

yml 是树形结构的配置文件,基础语法是“key: value”,注意:key 和 value 之间使用英文冒汗加空格的方式组成的,空格不可省略

# 注释
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    username: root
    password: root

这样写出来了代码就简约明了

优点

  1. yml 是⼀个可读性高,写法简单、易于理解,它的语法和 JSON 语⾔类似。
  2. yml 更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
  3. yml 支持更多的编程语言,它不止是 Java 中可以使用在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中同样可以

配置不同数据类型

# 注释
string: hello

boolean: true

int: 22

float: 22.22

那么对于 yml 的获取文件信息,和 properties是一样的,同样使用 @Value zhujie

@Controller
public class UserController {
    @Value("${string}")
    private String hello;
    @Value("${boolean}")
    private String bool;
    @Value("${int}")
    private String Int;
    @Value("${float}")
    private String Flo;

    @PostConstruct
    public void doPostConstruct(){
        System.out.println("string: " + hello);
        System.out.println("boolean: " + bool);
        System.out.println("int: " + Int);
        System.out.println("float: " + Flo);
    }
}

字符串类型的写法

  1. 字符串默认不要加上单引号或者双引号
  2. 加英文的单双引号就会表示特殊的含义
# 注释
str1: hel\nlo
str2: 'hel\nlo'
str3: "hel\nlo"

\n 是有着换行的特殊含义的,那么对于加或不加的字符串会有什么效果

image-20240127183418995

可以看到,不加和加了单引号就会得到 原所写的字符串

加了双引号就会变成原义输出

配置对象

yml 可以直接配置对象

student:
  id: 1
  name: 张三
  age: 22

或者可以使用行内式

student: {id: 1, name: 张三, age: 22}

配置好了之后就可以直接通过 @ConfigurationProperties 注解去获取配置对象了

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

    @Override
    public String toString() {
        return "StudentComponent{" + "id= " + id + ", " +
                                    "name= '" + name + '\'' +
                                    ", age= " + age + '}';
    }
}

注意:使用 @ConfigurationProperties 注解的类一定要有 Get和Set 方法。可以跟上述代码一样使用 LomBok 也可以直接写出来

通过控制类去获取该 Bean 打印查看结果

@Component
public class StudentController {
    @Autowired
    private StudentComponent studentComponent;

    @PostConstruct
    public void print(){
        System.out.println(studentComponent);
    }
}

image-20240127204849860

配置集合

yml 也可以配置集合

dbtypes:
  name:
    - mysql
    - sqlserver
    - test

或者使用行内式

dbtypes: {name: [mysql, sqlserver, test]}

然后通过list 去接收

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

通过控制类去获取该 Bean 打印查看结果

@Component
public class NameController {
    @Autowired
    private NameComponent nameComponent;

    @PostConstruct
    public void print(){
        System.out.println(nameComponent.getName());
    }
}

image-20240127205513882

读取配置文件的几种方法

Spring Boot 中读取配置文件有以下 5 种方法:

  1. 使用 @Value 读取配置文件。
  2. 使用 @ConfigurationProperties 读取配置文件。
  3. 使用 Environment 读取配置文件。
  4. 使用 @PropertySource 读取配置文件。
  5. 使用原生方式读取配置文件。

@Value 和 @ConfigurationProperties 在上文已经讲过了

Environment

首先 Environment 是一个类,这个类可以直接使用 @Autowired 去注入,注入完成后就可以调用其 getProperty 方法去获取指定配置信息了

@SpringBootApplication
public class SpringbootDemoApplication implements InitializingBean {
    @Autowired
    private Environment environment;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("str1:" + environment.getProperty("str1"));
    }
}

image-20240127211403086

@PropertySource

使用 @PropertySource 注解可以用来指定读取某个配置文件,但是只是指定,还是得用到 @Value注解去获取

@SpringBootApplication
@PropertySource("classpath:application.yml")
public class SpringbootDemoApplication implements InitializingBean {
    @Value("${str1}")
    private String str1;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("str1:" + str1);
    }
}

使用原生方式读取

最原始的方式就是通过 Properties 对象来读取配置文件

@SpringBootApplication
public class SpringbootDemoApplication implements InitializingBean {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Properties props = new Properties();
        try {
            // 指定配置文件
            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("application.yml"),
                    StandardCharsets.UTF_8);
            props.load(inputStreamReader);
        } catch (IOException e1) {
            System.out.println(e1);
        }
        // 调用方法获取指定信息
        System.out.println("str1:" + props.getProperty("str1"));
    }
}

设置不同环境的配置文件

可能一个项目中不同阶段时所用的配置是不一样的,例如测试时使用的数据库是本地的,发布后使用的数据库是云端的,那这样就需要一个个修改。

在Spring Boot 项目中可以为不同的环境设置不同的配置文件,然后只需要修改主配置文件就可以指定使用哪一套配置文件,并且只需要将不同的配置分开,公共的配置还是可以放在主配置文件中。

主配置文件名必须为:

application.properties / application.yml

其他的配置文件前面部分必须统一,横杠后的任取

application-XXX.properties / application-XXX.yml

需要指定用某一个配置文件,只需要在主配置文件中加入

spring.profiles.active=XXX // 注意XXX是横杠后任取的名称

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

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

相关文章

2000-2022年上市公司全要素生产率测算数据OLS法(含原始数据+测算代码do文档+计算结果)

2000-2022年上市公司全要素生产率测算数据OLS法&#xff08;含原始数据测算代码do文档计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、统计截止日期、固定资产净额、year、股票简称、报表类型编…

【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图

写在前面&#xff1a;在哔哩哔哩上面找到的Axure自学教程0基础入门课程&#xff0c;播放量最高&#xff0c;5个多小时。课程主要分为4个部分&#xff0c;快速入门、动态面板、常用动效、项目设计。UP主账号【Song老师产品经理课堂】。做个有素质的白嫖er&#xff0c;一键三连必…

【Spark系列3】RDD源码解析实战

本文主要讲 1、什么是RDD 2、RDD是如何从数据中构建 一、什么是RDD&#xff1f; RDD&#xff1a;弹性分布式数据集&#xff0c;Resillient Distributed Dataset的缩写。 个人理解&#xff1a;RDD是一个容错的、并行的数据结构&#xff0c;可以让用户显式的将数据存储到磁盘…

FPGA HDMI IP之DDC(本质I2C协议)通道学习

目的&#xff1a; 使用KingstVIS逻辑分析仪软件分析HDMI的DDC通道传输的SCDC数据&#xff08;遵循I2C协议&#xff09;&#xff0c;同时学习了解SCDC的寄存器与I2C通信协议。 部分英文缩写&#xff1a; HDMIHigh Definition Multi-media Interface高清多媒体接口DDCDisplay Dat…

css文本水波效果

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>文本水波效果</title><style>* {mar…

网际协议 IP、IP地址

目录 网际协议 IP 虚拟互连网络 使用中间设备进行互连 IP 地址 IP 地址及其表示方法 ​编辑 IP 地址采用 2 级结构 IP 地址的编址方法 分类的 IP 地址 各类 IP 地址的指派范围 一般不使用的特殊的 IP 地址 IPv4网络中的地址类型 分类的 IP 地址的优点和缺点 划分子网…

unity学习笔记----游戏练习05

一、阳光的收集和搜集动画开发 1.收集阳光的思路&#xff1a;当鼠标点击到阳光的时候&#xff0c;就可以进行收集了。可以通过为添加一个碰撞器来检测Circle Collider 2D 编写脚本&#xff1a; 在SunManager中写一个增加阳光的方法 //增加阳光 public void AddSubSun(in…

C++笔记之奇异递归模板模式CRTP(Curiously Recurring Template Pattern)和静态多态

C++笔记之奇异递归模板模式CRTP(Curiously Recurring Template Pattern)和静态多态 —— 杭州 2024-01-28 code review! 文章目录 C++笔记之奇异递归模板模式CRTP(Curiously Recurring Template Pattern)和静态多态一.CRTP二.CRTP 的基本特征表现:基类是一个模板类;派生…

(免费领源码)java#Springboot#mysql旅游景点订票系统68524-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

java eazyexcel 实现excel的动态多级联动下拉列表(2)使用MATCH+OFFSET函数

原理 同样是将数据源放到一个新建的隐藏的sheet中&#xff0c;第一行是第一个列表的数据&#xff0c;第二行是每一个有下级菜单的菜单&#xff0c;他下面的行就是他下级菜单的每一值使用MATCH函数从第二行找到上级菜单对应的列根据OFFSET函数从2中获取的列&#xff0c;取得下级…

Linux 系统相关的命令

参考资料 Linux之chmod使用【linux】chmod命令详细用法 目录 一. 系统用户相关1.1 查看当前访问的主机和用户1.2 切换用户1.2.1 设置root用户密码1.2.2 普通用户和root用户切换 1.4 系统状态1.4.1 vmstat 查看当前系统的状态1.4.2 history 查看系统中输入过的命令 二. 系统文件…

【Demo】基于CharacterController组件的角色控制

项目介绍 项目名称&#xff1a;Demo1 项目版本&#xff1a;1.0 游戏引擎&#xff1a;Unity2020.3.26f1c1 IDE&#xff1a;Visual Studio Code 关键词&#xff1a;Unity3D&#xff0c;CharacterController组件&#xff0c;角色控制&#xff0c;自定义按键&#xff0c;Scrip…

Spring 的存储和获取Bean

文章目录 获取 Spring 上下文对象的方式存储 Bean 对象的方式类注解配置扫描路径&#xff08;必须&#xff09;Controller&#xff08;控制器存储&#xff09;Service&#xff08;服务&#xff09;Repository&#xff08;持久层&#xff09;Component&#xff08;工具&#xff…

༺༽༾ཊ—Unity之-04-工厂方法模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用工厂方法模式 创建 飞船模型&#xff0c; 首先资源商店下载飞船模型&#xff0c…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson10(电话会话Ⅱ)

《美语从头学初级入门篇》 注意&#xff1a;被 删除线 划掉的不一定不正确&#xff0c;只是不是标准答案。 文章目录 Lesson 10 Telephone Conversation Ⅱ 电话会话&#xff08;二&#xff09;会话A会话B笔记I would like to do&#xff08;Id like to to do&#xff09;我想…

颠覆半导体:煤炭变身新材料,或将现身下一代CPU

《IEEE Spectrum》报道&#xff0c;一组研究人员正在探索将煤炭作为下一代二维晶体管绝缘材料的潜在替代品&#xff0c;以取代现有的金属氧化物薄膜。如果煤炭能够成功替代现代金属氧化物晶体管&#xff0c;那么这对于半导体行业来说将具有重大意义。 半导体器件正常工作需要依…

【数据结构和算法】--- 二叉树(5)--二叉树OJ题

目录 一、二叉树OJ题1.1 单值二叉树1.2 检查两颗树是否相同1.3 对称二叉树1.4 另一颗树的子树1.5 平衡二叉树 二、概念选择题 一、二叉树OJ题 1.1 单值二叉树 题目描述&#xff1a; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。只有给定的树是…

AIGC知识速递——Google的Bert模型是如何fine-tuning的?

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 选择合适的预训练模型&#xff1a; 从预训练的BERT模型开始&#xff0c;例如…

解决PyCharm的Terminal终端conda环境默认为base无法切换的问题

问题描述 在使用PyCharm的Terminal终端时&#xff0c;打开的默认环境为base。 在使用切换命令时&#xff0c;依旧无法解决。 解决方法 1、输入以下命令以查看conda的配置信息&#xff1a; conda config --show2、在输出中找到 auto_activate_base 的行&#xff0c;发现被…

【Linux 基础】常用基础指令(上)

文章目录 一、 创建新用户并设置密码二、ls指令ls指令基本概念ls指令的简写操作 三、pwd指令四、cd指令五、touch指令六、rm指令七、mkdir指令八、rmdir 指令 一、 创建新用户并设置密码 ls /home —— 查看存在多少用户 whoami —— 查看当前用户名 adduser 用户名 —— 创建新…