【JavaEE】Spring Boot 配置文件详解

news2024/11/29 12:51:12

一.配置文件的相关概念.

  • 配置文件主要用于配置应用程序的行为和属性. Spring Boot的配置文件提供了一种灵活且强大的方式,用于管理应用程序的配置信息。
  • 很多项目或框架的配置信息也放在配置文件中:
    • 项目的启动端口.
    • 数据库的连接信息(用户名/密码/驱动等的信息).
    • 第三方系统的调用密钥等信息.
    • 用于发现和定位问题的普通日志和异常日志等.
  • Spring Boot配置文件的格式有三种:
    • application.properties
    • application.yml.
    • application.yaml.

  1. yml为yaml的简写,在实际开发的过程中出现的频率最高.
  2. 当应用程序启动时, Spring Boot会自动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml 文件.
  3. 理论上讲== .properties 和 .yml 可以并存在于一个项目中==,但在实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护. 当 .properties 和 .yml并存时,两个配置都会加载. 如果配置文件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更高.

二.properties配置文件说明

1.properties基本语法

  • properties配置文件是以键值的形式配置的,key 和 value 之间是以"="连接的.
  • 举个例子来说明properties配置文件如何写的:
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=120348
  • properties的缺点:properties的配置文件中会有很多的冗余的信息.
    在这里插入图片描述

2.读取properties配置文件的数据.

  • 如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。@Value 注解使用" ${} "的格式读取,
  • 配置文件代码: mykey.key1=zhangsan
  • 测试代码:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PropertiesController {
 @Value("${mykey.key1}")
 private String key1;
 @RequestMapping("/key")
 public String key(){
 return "读取到值:"+key1;
 }
}

运行结果:
在这里插入图片描述

三.yml配置文件说明.

1.yml的基本语法

  • 它的全称 Yet Another Markup Language 翻译成中文就是"另一种标记语言".

  • yml 是树形结构的配置文件,它的基础语法是"key: value". key 和 value 之间使用英文冒号加空格的方式组成.空格不能省略.
    在这里插入图片描述

  • 第一项的配置为正确的,key 也是高亮蓝色显示的. 第⼆项没有空格是错误的使用方式,第二项的 key 没有高亮显示,该种配置的方式不会生效.

  • 使用yml配置文件连接数据库.

spring:
	datasource:
		url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false
		username: root
		password: root

2.读取yml配置文件的数据.

1.使用@Value读取yml配置文件的数据

读取基本数据类型以及null
package com.tuanzi.ssm.springhome01.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    @Value("${string.value}")
    private String value;
    @RequestMapping("/getValue")
    public String getValue() {
        return "读取到值"+value;
    }
}

在这里插入图片描述

注意事项:value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
配置如下信息:

string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

运行结果:
在这里插入图片描述

  • 从上述结果可以看出:
    • 字符串默认不用加上单引号或者双引号。
    • 单引号会转义特殊字符,使其失去特殊功能, 始终是一个普通的字符串.
    • 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义.
    • 此处的转义理解起来会有些拗口, \n 本意表示的是换行, 使用单引号会转义, 就是说, \n 不再表示换航了, 而是表示一个普通的字符串. 使用双引号不会转义, 表示 \n 表示的是它本身的含义, 就是换行

2.使用@ConfigurationProperties读取yml配置文件的数据

读取的是一个对象.
  • 在yml配置文件中配置如下信息:
student:
  id: 1
  name: java
  age: 18
@ConfigurationProperties(prefix = "student")
@Data
@Component
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    
}
@RestController

public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/readStudent")
    public String readStudent() {
        return student.toString();
    }
}

运行结果
在这里插入图片描述

读取的是一个集合
  • 在yml配置文件中配置如下信息:
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 	private List<String> name;
}
@RestController
public class ReadYml2 {
 	@Autowired
 	private ListConfig listConfig;
 	@RequestMapping("/readList")
 	public String readList(){
 	return listConfig.toString();
 	}
 }

运行结果:
在这里插入图片描述

读取的是一个Map
  • 在yml配置文件中配置如下信息:
maptypes:
 map:
 	k1: kk1
 	k2: kk2
 	k3: kk3
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 	private HashMap<String,String> map;
}
@RestController
public class ReadYml3 {
 	@Autowired
 	private MapConfig mapConfig;
 	@RequestMapping("/readMap")
 	public String readStudent(){
 	return mapConfig.toString();
 	}
 }

运行结果:
在这里插入图片描述

3.yml的优缺点

优点:
  1. 可读性高,写法简单, 易于理解
  2. 支持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
  3. 支持更多的编程语言, 不止是Java中可以使用, 在Golang, Python, Ruby, JavaScript中也可以使用.
缺点:
  1. 对格式有较强的要求.
  2. 不适合写复杂的配置文件
  • 比如properties格式如下
keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-Oce7-4982
keycloak.security[0].authRoles[0]= user
keycloak.security[0].collections[0].name = ssolog nur
keycloak.security[0].collections[0].patterns[0] = /login/*
  • 转换为yml
keycloak:
 realm: demo
 resource: fm-cache-cloud
 credentials:
 secret: d4589683-Oce7-4982-bcd3
 security:
 - authRoles:
 - user
 collections:
 - name: ssologinurl
   pattern:
     - /login/* 

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

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

相关文章

AI图书推荐:这就是ChatGPT

这本书《这就是ChatGPT》&#xff08;What Is ChatGPT Doing ... and Why Does It Work &#xff09;由Stephen Wolfram撰写 全书内容概要如下&#xff1a; **引言与预备知识** - 作者首先表达了对ChatGPT技术突破的兴奋之情&#xff0c;指出这不仅是技术的故事&#xff0c;也是…

Hadoop3:MapReduce源码解读之Map阶段的Job任务提交流程(1)

3、Job工作机制源码解读 用之前wordcount案例进行源码阅读&#xff0c;debug断点打在Job任务提交时 提交任务前&#xff0c;建立客户单连接 如下图&#xff0c;可以看出&#xff0c;只有两个客户端提供者&#xff0c;一个是YarnClient&#xff0c;一个是LocalClient。 显然&a…

ChatTTS 文字生成语言本地模型部署

ChatTTS部署 官方信息 [ChatTTS首页](https://chattts.com/)搭建步骤 1、下载源码 git clone https://github.com/2noise/ChatTTS.git 2、按照环境 pip install torch ChatTTS pip install -r requirements.txt 3、下载模型 git clone https://www.modelscope.cn/pzc163/ch…

ssm610学生社团管理系统+vue【已测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…

Hadoop3:MapReduce源码解读之Map阶段的数据输入过程整体概览(0)

一、MapReduce中数据流向 二、MapTask并行度 1、原理概览 数据块&#xff1a;Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。 数据切片&#xff1a;数据切片只是在逻辑上对输入进行分片&#xff0c;并不会在磁盘上将其切分成片进行存储。数据切片是MapRed…

ctfshow解题,知识点学习

1.easy_zip&#xff08;misc&#xff09; 1&#xff09;打开环境后是一个压缩包&#xff0c;解压里面有个flag.txt文件需要密码&#xff0c; 2&#xff09;直接用工具爆破&#xff0c;即可找到密码 2.easy_eval 1&#xff09;进入题目环境&#xff0c;先进行代码审计 首先说是…

「小明赠书活动」第五期“网安三剑客”套系图书《内网渗透技术》《渗透测试技术》《Web应用安全》

大模型风潮已掀起&#xff0c;各大巨头争相入局&#xff0c;从ChatGPT到Sora&#xff0c;全球的AI应用“卷出了花”。然而&#xff0c;网络安全人员在享受AI技术带来的便捷之余&#xff0c;也不得不面对一系列新兴的安全挑战&#xff0c;无法忽视。 ⭐️ 赠书 - 图书简介 人…

RabbitMQ python第三方库pika应用入门实践

1. RabbitMQ简介 RabbitMQ是一个可靠、高效的开源消息代理服务器&#xff0c;基于AMQP协议。它具备以下特点&#xff1a; 可以支持多种消息协议&#xff0c;如AMQP、STOMP和MQTT等。提供了持久化、可靠性和灵活的路由等功能。支持消息的发布和订阅模式。具备高可用性和可扩展…

From self-attention 2 flash-attention 数学原理与 cuda 实现优化

self attension 是transformer 编码器和解码器中共同的一个计算环节&#xff0c;在整个transformer 网络体系中耗费的算力比例占主导。所以节省self attention 的正向和反向的计算时间&#xff0c;就可以加速 transormer 的训练和推理过程。 1&#xff0c;self attention 的数…

学习笔记——路由网络基础——环回接口(loopback)

6、环回接口(loopback) (1)定义 环回接口(loopback) &#xff1a;是一种虚拟的接口&#xff0c;是一种纯软件性质的虚拟接口&#xff0c;模拟一个单独的网段。 Loopback等于在设备中模拟另外不同的网络&#xff0c;实现不需要物理接口连接设备&#xff0c;依然可以模拟的功能…

MobileNetV4实战:使用 MobileNetV4实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

了解Synchronized对象头?

1、对象头的结构 Java对象存储在内存中结构为&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;实例数据&#xff08;Instance Data&#xff09;&#xff1a;定义类中的成员属性对齐填充字节&#xff08;Padding&#xff09;&#xff1a;由于HotSpot虚拟机的自…

高通SDX12:Voice Over USB 功能调试

一、功能概述及使用环境 Linux PC 作为上位机,内置 SLIC基于高通 SDX12 平台的设备作为从设备,通过USB连接到 Linux PC 上,在 PC 上枚举 UAC 设备从设备进行 MO/MT Call 时,上位机使用 arecord 进行录音,音频数据通过 USB 传至上位机,上位机停止录音后再使用 aplay 进行播…

经典文献阅读之--Online Monocular Lane Mapping(使用Catmull-Rom样条曲线完成在线单目车道建图)

0. 简介 对于单目摄像头完成SLAM建图这类操作&#xff0c;对于自动驾驶行业非常重要&#xff0c;《Online Monocular Lane Mapping Using Catmull-Rom Spline》介绍了一种仅依靠单个摄像头和里程计生成基于样条的在线单目车道建图方法。我们提出的技术将车道关联过程建模为一个…

【STM32】ucOS-III多任务程序

【STM32】uc/OS-III多任务程序 文章目录 【STM32】uc/OS-III多任务程序STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程与相关实验实验任务实验过程一、 uC/OS-III源码下载二、 建立STM32CubeMX工程三、 复制uC/OS-III文件到工程文件夹四、 添加工程组件和头文件路径五、修…

【中颖】SH79F9202 串口通信

头文件 uart.h #ifndef UART_H #define UART_H#include "SH79F9202.h" #include "LCD.h" #include "timer2.h" #include "timer5.h" #include "cpu.h" #include "key.h" #include "io.h" #include &qu…

【C++】深入理解decltype和decltype(auto)

深入理解decltype和decltype&#xff08;auto&#xff09; 一、decltype语法介绍二、decltype的推导规则1. expr不加括号2. expr加上括号 三、关于decltype的CV属性推导四、 decltype(auto) 的使用 一、decltype语法介绍 decltype关键字是C11新标准引入的关键字&#xff0c;它…

向量数据库是什么?

向量数据库是什么&#xff1f; 随着人工智能和机器学习技术的迅猛发展&#xff0c;向量数据库作为一种新型数据库引起了广泛关注。向量数据库专门用于存储和查询高维向量数据&#xff0c;是在大规模数据检索和相似性搜索领域的重要工具。 向量数据库的定义 向量数据库是一种…

心链13---主页切换功能 + loading特效 + 导航栏完善 + 队伍页接口修改

心链 — 伙伴匹配系统 直接取出所有用户&#xff0c;依次和当前用户计算分数&#xff0c;取 TOP N&#xff08;54 秒&#xff09; 优化方法&#xff1a; 切忌不要在数据量大的时候循环输出日志&#xff08;取消掉日志后 20 秒&#xff09;Map 存了所有的分数信息&#xff0c;占…

上位机图像处理和嵌入式模块部署(f407 mcu和其他mcu品类的选择)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多朋友读书的时候学的是stm32&#xff0c;工作中用的也是stm32。这本来问题不大&#xff0c;但是过去两三年的经历告诉我们&#xff0c;mcu的使用…