当前位置: 首页 > article >正文

SpringBoot 配置文件核心用法(Properties YAML)

SpringBoot 配置文件作用SpringBoot 定义了规范的配置文件格式用于集成其他框架并集中管理项目各类配置信息典型场景包括项目启动端口自定义服务监听端口数据库连接信息包含用户名、密码等第三方系统调用密钥日志配置普通日志、异常日志用于问题定位与排查1.关键配置场景说明项目启动端口SpringBoot 内置 Tomcat 服务器默认端口号为 8080若 8080 端口被其他程序占用需通过配置文件自定义端口号数据库连接信息持久层框架如 MyBatis、JPA 等是对 JDBC 的深层封装不同应用访问的数据库不同需通过配置文件自定义数据库连接参数2.配置文件快速入门SpringBoot 项目创建时会自动生成配置文件可通过修改配置文件更改服务端口号解决 8080 端口被占用问题修改 application.properties ⽂件server.port9090显⽰Tomcat启动端⼝号为9090访问程序:http://127.0.0.1:9090/login.html此时:http://127.0.0.1:808/login.html 就不能再访问了3.配置文件的格式Spring Boot 配置文件有以下三种application.propertiesapplication.ymlapplication.yaml注意properties 优先级比yml. yaml的优先级要高一些yml为yaml的简写实际开发中出现频率最高。yaml和yml的使用方式一样课堂中只讲yml文件的使用。当应用程序启动时Spring Boot 会自动从 classpath 路径找到并加载application.properties和application.yaml或者application.yml文件。也可以通过spring.config.name指定文件路径和名称参考 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files如下图所示3.1配置文件包装类比类似商品包装.properties是老款包装Spring Boot 项目默认格式.yml是新版包装实际开发中更推荐使用。3.2特殊说明共存与优先级理论上.properties和.yml可共存启动时都会加载若配置冲突.properties优先级更高。实践建议实际业务中建议统一使用一种格式便于维护、降低故障概率。注意事项重启idea ,会出现有一点小问题我们重启idea我们会发现他乱码了遇到这种情况我们没有恢复的办法解决办法1.2.3.这个只是修改了这个的配置我们需要修改整个的这个配置文件4.修改本地的配置4.properties 配置文件说明4.1 基本语法格式键值对keyvalue形式注释使用#添加注释示例# 配置项目端口号 server.port8080 # 配置数据库连接信息 spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb?characterEncodingutf8useSSLfalse spring.datasource.usernameroot spring.datasource.passwordroot4.2 读取配置文件方式使用Value注解以${key}格式读取配置示例mykey.key1 bite代码示例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; } }补充说明Value注解可直接注入配置文件中的值到类成员变量。访问/key接口时会返回配置文件中mykey.key1对应的值如读取到值:bite。PostConstruct 核心说明1. 基本定义PostConstruct是 Java EE 中的注解Spring 也完全支持作用是在 Spring 容器创建完 Bean 实例、完成依赖注入后自动执行标注了这个注解的方法。简单说Bean 先被创建 → 依赖注入比如Autowired注入的对象→PostConstruct方法执行。初始化数据比如加载配置、初始化缓存、连接第三方服务执行 Bean 创建后的前置操作依赖注入完成后才能执行避免空指针。二、完整可运行示例import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; // 普通的Spring Bean Component public class UserService { // 依赖注入的对象 Autowired private ConfigService configService; // 空参、无返回值的初始化方法 PostConstruct public void init() { // 此时configService已经完成注入可安全使用 String config configService.getConfig(); System.out.println(Bean初始化完成加载配置 config); // 还可以做缓存初始化、数据预加载等操作 } } // 依赖的ConfigService示例 Component class ConfigService { public String getConfig() { return 数据库连接配置jdbc:mysql://localhost:3306/test; } }三、关键注意点标注的方法必须是无参数、无返回值void、非静态执行时机晚于Autowired依赖注入早于 Bean 被业务代码使用替代方案Spring 的InitializingBean接口但PostConstruct更简洁4.3 properties 缺点分析properties 配置是以key-value的形式配置的如下图所⽰从上述配置key看出properties配置⽂件中会有很多的冗余的信息⽐如这些想要解决这个问题就可以使⽤yml配置⽂件的格式化了.5. yml 配置文件说明yml 是 YAML 的缩写它的全称是Yet Another Markup Language翻译成中文就是 “另一种标记语言”。我们先来学习 yml 的语法。5.1 yml 基本语法yml 是树形结构的配置文件它的基础语法是key: value。key 和 value 之间使用英文冒号加空格的方式组成空格不可省略。基础语法如下1. 基础键值对核心语法# 正确写法冒号后必须带空格 server: port: 8080 host: localhost # 错误写法无空格配置无法解析 # server:port:80802. 数据类型# 字符串默认无需引号特殊字符需加引号 name: 张三 nickname: zhangsan:001 # 包含特殊符号时加双引号 remark: hello\nworld # 单引号会转义特殊字符\n 不会换行 # 数字 age: 20 score: 98.5 # 布尔值 enabled: true disabled: false # 空值 empty: null # 或 ~ # 日期ISO 8601 格式 birthday: 2024-03-183. 集合 / 数组两种写法# 写法1短横线 空格推荐层级清晰 user: hobbies: - 篮球 - 游泳 - 编程 # 写法2中括号简写单行 user: tags: [Java, SpringBoot, MySQL]4. 对象 / 嵌套配置# 多层嵌套SpringBoot 常用 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: 123456 redis: host: 127.0.0.1 port: 6379 timeout: 5000ms5. 注释规则# 单行注释仅支持单行用 # 开头 server: port: 8080 # 端口配置行内注释也需用 # # 多行注释需每行加 # # 开发环境端口 # 生产环境可改为 80使用 yml 连接数据库yml使用示例:spring: datasource: url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncodingutf8useSSLfalse username: root password: rootyml 和 properties 连接数据库的配置对比5.2 yml 使用进阶5.2.1 yml 配置不同数据类型及 null# 字符串 string.value: Hello # 布尔值true或false boolean.value: true boolean.value1: false # 整数 int.value: 10 # 浮点数 float.value: 3.14159 # Null~代表null null.value: ~ # 空字符串 #直接后面什么都不加就可以了但这种方式不直观更多的表示是使用引号括起来 empty.value: 5.2.1.1 yml 配置读取yml 读取配置的方式和 properties 相同使用Value注解即可实现代码如下yml 配置string: hello: biteJava 代码RestController public class ReadYml { Value(${string.hello}) private String hello; RequestMapping(/ymlKey) public String key(){ return 读取到值:hello; } }访问地址http://127.0.0.1:8080/ymlKey运行结果页面显示读取到值:bite5.2.1.2 注意事项value 值加单双引号字符串默认不用加上单引号或者双引号如果加英文的单双引号可以表示特殊的含义。尝试在application.yml中配置如下信息string: str1: Hello \n Spring Boot. str2: Hello \n Spring Boot. str3: Hello \n Spring Boot.读取程序实现代码如下RestController public class ReadYml { Value(${string.str1}) private String str1; Value(${string.str2}) private String str2; Value(${string.str3}) private String str3; RequestMapping(/yml) public String readYml(){ System.out.println(str1); System.out.println(str2); System.out.println(str3); return yml; } }以上程序的执行结果如下Hello \n Spring Boot. Hello \n Spring Boot. Hello Spring Boot.从上述结果可以看出字符串默认不用加上单引号或者双引号。单引号会转义特殊字符使其失去特殊功能始终是一个普通的字符串。双引号不会转义字符串里面的特殊字符特殊字符会表示本身的含义。此处的转义理解起来会有些拗口\n本意表示的是换行使用单引号会转义\n不再表示换行而是表示一个普通的字符串。使用双引号不会转义\n表示的是它本身的含义就是换行。JavaEE 的学习重在理解和使用不纠结概念和描述想要快速赋值value5.2.2 配置对象我们还可以在 yml 中配置对象如下配置student: id: 1 name: Java age: 18或者是使用行内写法与上面的写法作用一致student: {id: 1,name: Java,age: 18}这个时候就不能用Value来读取配置中的对象了此时要使用另一个注解ConfigurationProperties来读取具体实现如下import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; ConfigurationProperties(prefix student) Component Data public class Student { private int id; private String name; private int age; }调用类的实现如下RestController public class StudentController { Autowired private Student student; RequestMapping(/readStudent) public String readStudent(){ return student.toString(); } }访问地址http://127.0.0.1:8080/readStudent5.2.3 配置集合配置文件也可以配置list集合如下所示dbtypes: name: - mysql - sqlserver - db2集合的读取和对象一样也是使用ConfigurationProperties来读取的具体实现如下import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; Component ConfigurationProperties(dbtypes) Data public class ListConfig { private ListString name; }访问集合的实现如下import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController public class ReadYml2 { Autowired private ListConfig listConfig; RequestMapping(/readList) public String readList() { return listConfig.toString(); } }5.2.4 配置 Map配置文件也可以配置map如下所示maptypes: map: k1: kk1 k2: kk2 k3: kk3或者是使用行内写法与上面的写法作用一致maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}Map 的读取和对象一样也是使用ConfigurationProperties来读取的具体实现如下import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.HashMap; Component ConfigurationProperties(maptypes) Data public class MapConfig { private HashMapString,String map; }打印类的实现java运行RestController public class ReadYml2 { Autowired private MapConfig mapConfig; RequestMapping(/readMap) public String readStudent() { return mapConfig.toString(); } }5.3 yml 优缺点优点可读性高写法简单易于理解支持更多的数据类型可以简单表达对象、数组、List、Map 等数据形态支持更多的编程语言不止是 Java 中可以使用在 Golang、Python、Ruby、JavaScript 中也可以使用缺点不适合写复杂的配置文件比如 properties 格式如下keycloak.realm demo keycloak.resource fm-cache-cloud keycloak.credentials.secret d4589683-0ce7-4982-bcd3 keycloak.security[0].authRoles[0] user keycloak.security[0].collections[0].name ssologinurl keycloak.security[0].collections[0].patterns[0] /login/*转换为 ymlkeycloak: realm: demo resource: fm-cache-cloud credentials: secret: d4589683-0ce7-4982-bcd3 security: - authRoles: - user collections: - name: ssologinurl patterns: - /login/*转换的过程也比较花费精力如果配置更复杂一点可读性会更差代码也会更难写对格式有较强的要求一个空格可能会引起一场血案

相关文章:

SpringBoot 配置文件核心用法(Properties YAML)

SpringBoot 配置文件作用 SpringBoot 定义了规范的配置文件格式,用于集成其他框架,并集中管理项目各类配置信息,典型场景包括: 项目启动端口:自定义服务监听端口数据库连接信息:包含用户名、密码等第三方…...

什么是原型链(Prototype Chain)?proto和prototype的关系与区别是什么?

一、定义原型链是 JavaScript 实现继承和属性查找的核心机制,通俗点就是 “对象自己没有某个东西,就一层层向上找别人借” 的链条__proto__:相当于一个向上查找的链条(工具)prototype(原型对象)…...

博世 HBA 液压制动辅助系统性能规范详解

本文整理自博世官方 HBA 性能规范文档(VERSION 2.0),详细拆解乘用车 ESP 系统中 HBA 液压制动辅助的核心功能、试验条件、性能要求及标定规范,适合汽车电子、底盘控制工程师参考学习。一、HBA 功能核心定义HBA(Hydraul…...

前端-小米商城静态版复刻总结

整个项目采用css与html进行实现,有一些基础的交互功能。在做项目过程中我觉得难点有以下几个地方:1.在html 中 position一般是默认,网页就会按顺序把盒子从上到下排列,盒子属于块级元素。块级元素独占一行,可以设置宽高…...

Python 全栈实战 · 第8章

网站开发入门(Flask 快速搭建网页,实战可用) 8.1 本章能学到什么? 网站开发是 Python 全栈必备技能。本章我们用最简单、最容易上手的 Flask 框架,做到: 搭建自己的网页 实现路由访问 显示文字、页面 做简单接口服务 本地运行、浏览器访问 零基础也能一次学会,不…...

不学 Python,Java 也能调大模型?15 分钟跑通第一个 AI 接口(Java 架构师的 AI 工程笔记 01)

文章目录Java 架构师的 AI 工程笔记(一):5 个概念 第一次跟 AI 对话理论篇一、Java 工程师为什么能搞 AI Agent二、开始写代码之前,你得搞懂这 5 个概念2.1 Token——LLM 的计费单位2.2 Prompt——你给 LLM 的指令2.3 Temperatur…...

GEE案例分析:基于Dynamic World 数据的农用地识别活跃与休耕农田

🌾 用 GEE 和 Dynamic World 识别活跃与休耕农田 在全球粮食安全与土地利用变化研究中,农田的动态监测 一直是核心议题。传统方法依赖地面调查或单一时期遥感影像,难以捕捉农田的季节性轮作和长期撂荒。如今,借助 Google Earth Engine(GEE) 和高频土地覆盖产品 Dynamic…...

洛谷 B4497:[GESP202603 二级] 数数

【题目来源】 https://www.luogu.com.cn/problem/B4497 【题目描述】 对于正整数 n,如果 n 的所有数位中包含恰好 3 个 2,Alice 会认为这个正整数是美丽的。例如,正整数 24122 中包含 3 个 2,所以 24122 是美丽的;正整…...

大型城市二次供水设施远程智能管理系统

随着城市化进程的加快,二次供水设施作为城市供水“最后一公里”的关键环节,其智能化管理水平直接关系到居民的用水安全和生活质量。映翰通网络依托其IG900边缘计算网关,助力大型城市实现二次供水设施的远程智能管理,推动供水系统向…...

Java后端开发 笔试知识点复习(一)

某行某费 线上笔试一、选择题和简答题1. CompletableFuture是Java 8 引入的异步编程工具&#xff0c;用于异步任务的组合和链式调用。通过静态工厂方法可以创建CompletableFuture实例&#xff1a;CompletableFuture<String> future CompletableFuture.supplyAsync(() -…...

股票基金:欧洲各类指数都是什么意思 / 成分是什么

以下是欧洲主要指数的详细解释&#xff0c;包括市值的具体金额&#xff08;基于最新可用数据估算&#xff09;指数名称含义成分股及特点总市值&#xff08;估算&#xff09;英国富时100指数&#xff08;FTSE 100&#xff09;反映伦敦证券交易所市值最大的100家上市公司的整体表…...

Java程序设计(第3版)——配置环境变量之path

配置环境变量之path PATH的配置 以下载到C盘为例 首先点击“此电脑”&#xff08;如下所示&#xff09;&#xff1a; 此电脑 > 本地磁盘 (C:) > Program Files > Java > jdk1.8.0_131 > bin > 其次点击窗口栏右侧并复制以完成下一步配置环境的准备工作 然…...

股票基金:全球各类指数都是什么意思 / 成分是什么

A股指数指数名称含义成分股特点上证指数反映上海证券交易所上市股票价格的整体表现上海证券交易所全部A股和B股历史悠久&#xff0c;市场认可度高&#xff0c;是反映中国股市整体走势的重要指标深圳指数&#xff08;深证成指&#xff09;反映深圳证券交易所上市股票价格的整体表…...

什么是 MCP?Model Context Protocol 深度解析

什么是 MCP&#xff1f;Model Context Protocol 深度解析 一、MCP 是什么&#xff1f; MCP&#xff08;Model Context Protocol&#xff09;是 Anthropic 推出的标准化工具调用协议&#xff0c;为 AI 模型与外部工具之间的交互提供了统一的规范。简单来说&#xff0c;MCP 就像…...

07. Capture 中 Find 的高阶小应用_正则表达式 I OrCAD X Capture CIS 设计小诀窍第三季

大家好&#xff01;在进行原理图设计时&#xff0c;我们经常需要查找特定的网络信号——比如所有的TF Card数据线、所有的MCU控制信号&#xff0c;或者所有以“SW”开头的网络。如果只靠普通的字符串搜索&#xff0c;要么搜不全&#xff0c;要么把无关信号也搜出来&#xff0c;…...

浅聊Flink的广播模式

浅聊Flink的广播模式 前言 最近接触到一个新颖的中间件 Flink,为什么接触到这个呢,是因为我们公司系统需要做一个告警模块,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topic 里面实时读取到监控数据,并将读取到的监控数据做一些 聚合/转换/计算…...

HarmonyOS6 ArkTS 外描边(outline)使用文档

文章目录一、核心属性与接口1. 统一设置接口 outlineAPI 11API 182. 分设属性&#xff08;精细控制&#xff09;二、OutlineStyle 枚举&#xff08;三种线型&#xff09;三、使用方式方式1&#xff1a;独立属性分开设置方式2&#xff1a;统一 outline 对象配置方式3&#xff1a…...

在中国读者中,哪些科幻小说是畅销的?为什么它们畅销

如果只从小说内容本身出发&#xff0c;而不去谈产业、政策、影视改编和时代环境&#xff0c;那么一部科幻小说能不能畅销&#xff0c;核心往往不复杂。读者真正会为一本科幻小说买单&#xff0c;通常不是因为它属于“科幻”这个门类&#xff0c;而是因为它在阅读过程中提供了几…...

金仓数据库在MySQL迁移中的技术观察:高兼容性与平滑替代路径实践

金仓数据库在MySQL迁移中的技术观察&#xff1a;高兼容性与平滑替代路径实践 2023年底&#xff0c;MySQL 5.7正式停止官方维护支持——这一曾被广泛应用于中小企业核心系统的开源数据库&#xff0c;悄然进入生命周期尾声。对开发者而言&#xff0c;这不仅是版本迭代的常规提示…...

属电子信息类专业电子信息工程(Electronic Information Engineering,简称 EE)专业是什么?

属电子信息类专业电子信息工程&#xff08;Electronic Information Engineering&#xff0c;简称 EE&#xff09;专业是什么&#xff1f;电子信息工程&#xff08;Electronic Information Engineering&#xff0c;简称 EE&#xff09;简称电子信息&#xff0c;是现代科技领域的…...

金仓数据库在MySQL迁移中的实践复盘:一家三甲医院电子病历系统性能与成本优化实录

金仓数据库在MySQL迁移中的实践复盘&#xff1a;一家三甲医院电子病历系统性能与成本优化实录 2024年初&#xff0c;西安市第一医院信息科主任老张盯着监控大屏皱眉&#xff1a;“早高峰挂号排队超3分钟&#xff0c;电子病历调阅平均要4.7秒——这哪是‘智慧医院’&#xff0c…...

YOLO系列算法改进 | 主干改进篇 | 替换SHViT高效视觉变换器 | 助力模型极致轻量化,同时保持高精度性能! | CVPR 2024

0. 前言 本文介绍了SHViT高效视觉变换器,并将其集成到ultralytics最新发布的YOLO26目标检测算法中,替换原有Backbone网络。SHViT的创新在于从宏观和微观两个层面系统性消除计算冗余,通过大步长块化主干和单头部分通道注意力,以最少的内存访问成本实现超快视觉推理。将其作…...

StressTheGPU v1.44 丨便携显卡压力测试工具

StressTheGPU v1.44 便携版是轻量免安装的专业显卡压力测试工具&#xff0c;适配 Windows 全系列系统&#xff0c;凭借低 CPU 占用的优势&#xff0c;可在极端负载下精准评估显卡稳定性与性能&#xff0c;支持实时监控与基准测试&#xff0c;全面满足硬件验机、调试等核心需求。…...

基于DQ轴谐波提取器的PMSM永磁同步电机谐波抑制技术:五七次谐波的有效抑制与电流环解耦补偿应用

基于DQ轴谐波提取器的永磁同步电机谐波抑制 PMSM 1.通过谐波提取器&#xff0c;直接提取DQ轴的谐波分量进行抑制&#xff0c;对五七次谐波电流抑制效果效果很好。 2.为了放大效果&#xff0c;采用主动注入谐波电压的方法&#xff0c;增大了电机中的谐波分量。 3.调制算法采用SV…...

HoRain云--Dash 简介

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

Node.js - 04:MongoDB、会话控制

MongoDB1、简介MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的 应用程序数据库的主要作用就是 管理数据 &#xff0c;对数据进行 增&#xff08;c&…...

大模型工具使用

介绍模型下载API测试本地平台搭建对比表格详细说明TransformersFastChatOllamavLLM关键差异介绍大模型一些简单的使用 模型下载 模型快捷的下载 魔搭社区 Ollama【可以直接在Ollama软件中下载】 API测试 通过API测试的平台&#xff1a;硅基流动 本地平台搭建 对比表格 工…...

AI辅助开发:前端“加速器”还是后端“稳定器”?——基于项目类型与用户规模的实战指南

文章目录前言一、技术原理解析1. 核心差异维度对比2. AI 辅助开发的技术架构模型二、按 DAU 规模分层的实战策略与代码实证1. 低 DAU 项目&#xff08;<1万&#xff09;&#xff1a;MVP 验证期后端实战&#xff1a;从需求到接口的秒级响应前端实战&#xff1a;快速但粗糙的 …...

国内代理IP地域选择与降低延迟方法

在进行公开数据获取、广告效果监测或业务信息整合时&#xff0c;很多企业都会遇到一个现实问题&#xff1a;请求延迟偏高&#xff0c;影响整体效率。尤其是在使用国内代理IP时&#xff0c;地域选择往往被忽视&#xff0c;但实际上&#xff0c;它对延迟的影响非常直接。从网络传…...

计算机毕业设计之springboot学生会事务管理平台的设计与实现

疫情爆发以来&#xff0c;越来越多的用户借助于移动手机、电脑完成生活中的事务&#xff0c;许多的传统行业也更加重视与互联网的结合。本论文探讨利用不断发展和进步的网络技术&#xff0c;实现对个人信息修改、学生、任务分类、活动类型、任务安排、完成任务、 活动信息、加入…...