Spring Boot 核心配置文件
Spring Boot 核心配置文件
- 1、application.properties
- 2、application.yml
- 使用建议
- 3、常用配置项
- 服务器配置
- 数据库配置
- 日志配置
- 其他配置
- 4、配置文件的加载顺序
- 5、配置文件的占位符
- 6、配置文件的动态刷新
- 7、配置文件的属性分组
- 定义属性分组
- 绑定属性分组
- 使用属性分组
- 总结
Spring Boot 是一个基于 Spring 框架的快速开发、简化配置、约定优于配置的框架。在 Spring Boot 应用中,核心配置文件是
application.properties或application.yml,这两个文件都可以用来配置应用程序的属性和环境。
1、application.properties
application.properties 是基于属性文件的配置格式,支持 key-value 形式的键值对。在 Spring Boot 中,可以在 application.properties 文件中配置各种应用程序属性,如端口号、数据库连接、日志级别等等。
以下是 application.properties 的一个示例:
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
logging.level.org.springframework=DEBUG
上面的示例中,配置了应用程序的端口号为 8080,数据库连接为 MySQL 数据库,日志级别为 DEBUG 等。
2、application.yml
application.yml 是基于 YAML 格式的配置文件,支持层级结构的配置形式,可以更加清晰地表达配置项之间的关系。与 application.properties 相比,application.yml 更易读、易维护,也更加灵活。
以下是 application.yml 的一个示例:
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: root
logging:level:org.springframework: DEBUG
上面的示例中,与 application.properties 的示例配置项相同,但是使用了 YAML 格式的层级结构。在 YAML 中,使用缩进来表示层级关系,比如 spring.datasource.url 就是 spring 的子级,datasource 是 spring 的子级,url 是 datasource 的子级。
使用建议
尽量使用 application.yml,因为它更加灵活、易读、易维护;对于简单的配置项,可以使用 application.properties;在编写配置文件时,注意缩进和空格的使用,这是 YAML 格式的重要特点;在配置文件中,可以使用 @Value 注解来注入配置属性,也可以使用 @ConfigurationProperties 来批量注入配置属性。
3、常用配置项
以下是一些常用的 Spring Boot 配置项:
服务器配置
server.port:应用程序监听的端口号,默认为 8080;
server.servlet.context-path:应用程序的上下文路径,默认为空;
server.tomcat.access-log-enabled:是否开启访问日志,默认为 false。
数据库配置
spring.datasource.url:数据库连接 URL;
spring.datasource.username:数据库用户名;
spring.datasource.password:数据库密码;
spring.datasource.driver-class-name:数据库驱动类名;
spring.datasource.hikari.*:Hikari 连接池的配置项。
日志配置
logging.level.*:设置日志级别,可以针对不同的包设置不同的日志级别;
logging.file.name:指定日志文件名;
logging.file.path:指定日志文件路径;
logging.pattern.console:设置控制台日志输出格式;
logging.pattern.file:设置文件日志输出格式。
其他配置
spring.profiles.active:指定应用程序的活动配置文件,如 dev、prod 等;
spring.main.allow-bean-definition-overriding:是否允许 Bean 覆盖,默认为 false;
spring.main.banner-mode:设置启动时显示的 Banner 模式,如 off、console、log 等。
4、配置文件的加载顺序
在 Spring Boot 中,配置文件有多种加载方式,包括:
- classpath:/ 下的 application.properties 或 application.yml;
- classpath:/config/ 下的 application.properties 或 application.yml;
- 外部配置文件,如 /etc/myapp/application.properties 或 file:///opt/myapp/application.yml。
这些配置文件的加载顺序是:
- classpath:/config/application.yml(或 .properties);
- classpath:/application.yml(或 .properties);
- 外部配置文件。
其中,1 和 2 的顺序可以颠倒,即先加载 classpath:/application.yml(或 .properties),再加载 classpath:/config/application.yml(或 .properties)。
如果同时存在多个配置文件,会按照上述顺序进行合并,后面的配置会覆盖前面的配置。
5、配置文件的占位符
在配置文件中,可以使用 ${…} 形式的占位符来引用其他配置属性的值。例如:
server:port: 8080
myapp:name: myappversion: 1.0greeting: Hello, ${myapp.name} ${myapp.version}!
上面的示例中,myapp.greeting 属性使用了 ${myapp.name} 和 ${myapp.version} 占位符来引用其他属性的值。
6、配置文件的动态刷新
在 Spring Boot 应用程序中,如果想要动态地刷新配置文件,可以使用 @RefreshScope 注解。该注解会在配置文件变化时,自动更新注入该注解的 Bean。
@RestController
@RefreshScope
public class MyController {@Value("${myapp.greeting}")private String greeting;@GetMapping("/greeting")public String greeting() {return greeting;}
}
上面的示例中,使用了 @RefreshScope 注解来动态刷新 greeting 属性的值。当 myapp.name 或 myapp.version 属性变化时,greeting 属性的值也会随之变化。
7、配置文件的属性分组
在实际开发中,应用程序的配置文件可能会变得非常复杂,属性的数量也会很多。为了更好地组织和管理属性,可以使用 Spring Boot 的属性分组功能。
定义属性分组
在配置文件中,可以使用 @ConfigurationProperties 注解来定义属性分组。例如:
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {private String name;private String version;// getters and setters
}
上面的示例中,使用 @ConfigurationProperties 注解定义了一个名为 myapp 的属性分组,并声明了 name 和 version 两个属性。在 application.yml 文件中,可以通过 myapp.name 和 myapp.version 来访问这两个属性的值。
绑定属性分组
在 Spring Boot 中,可以通过 @EnableConfigurationProperties 或 @ConfigurationPropertiesScan 注解来绑定属性分组。例如:
@SpringBootApplication
@EnableConfigurationProperties(MyAppProperties.class)
public class MyAppApplication {// ...
}
上面的示例中,使用 @EnableConfigurationProperties 注解来绑定了 MyAppProperties 属性分组。
使用属性分组
在应用程序中,可以使用 @Autowired 或 @Inject 注解来注入属性分组。例如:
@RestController
public class MyController {@Autowiredprivate MyAppProperties myAppProperties;@GetMapping("/info")public MyAppProperties info() {return myAppProperties;}
}
上面的示例中,使用 @Autowired 注解注入了 MyAppProperties 属性分组,并在 info 接口中返回了该属性分组的值。
总结
在 Spring Boot 中,可以通过属性分组来组织和管理配置文件中的属性。使用 @ConfigurationProperties 解定义属性分组,使用 @EnableConfigurationProperties 或 @ConfigurationPropertiesScan 注解来绑定属性分组,在应用程序中使用 @Autowired 或 @Inject 注解注入属性分组。通过合理地使用属性分组,可以使应用程序的配置更加清晰、易维护、易扩展。
相关文章:
Spring Boot 核心配置文件
Spring Boot 核心配置文件1、application.properties2、application.yml使用建议3、常用配置项服务器配置数据库配置日志配置其他配置4、配置文件的加载顺序5、配置文件的占位符6、配置文件的动态刷新7、配置文件的属性分组定义属性分组绑定属性分组使用属性分组总结Spring Boo…...
个人小站折腾后记
个人小站折腾后记 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某…...
WebService简单入门
1. JAX-WS发布WebService 创建web工程 创建simple包,和server、client两个子包。正常情况下server和client应该是两个项目,这里我们只是演示效果,所以简化写到一个项目中: 1.1 创建服务类Server package simple.server;import ja…...
「Vue面试题」vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
文章目录一、是什么二、如何做接口权限路由权限控制菜单权限方案一方案二按钮权限方案一方案二小结参考文章一、是什么 权限是对特定资源的访问许可,所谓权限控制,也就是确保用户只能访问到被分配的资源 而前端权限归根结底是请求的发起权,…...
Docker部署springcloud项目(清晰明了)
概述 最近在想做个cloud项目,gitee上找了个模板项目,后端使用到 Nacos、Gateway、Security等技术,需要到 Docker 容器部署,在此总结一下,若有不足之处,望大佬们可以指出。 什么是 Docker Docker 使用 Google 公司推…...
搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」
文章目录1.前言2.本地SFTP服务器搭建2.1.SFTP软件的下载和安装2.2.配置SFTP站点2.3.Cpolar下载和安装3.SFTP服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 现在的网络发达,个人电脑容量快速上升,想要保存的数据资料也越…...
ChatGPT优化Python代码的小技巧
使用 chatGPT 优化代码并降低运行时的云成本 许多开发人员说“过早的优化是万恶之源”。 这句话的来源归功于Donald Knuth。在他的书《计算机编程的艺术》中,他写道: “真正的问题是,程序员在错误的时间和错误的地方花费了太多时间来担心效率…...
Stm32-使用TB6612驱动电机及编码器测速
这里写目录标题起因一、电机及编码器的参数二、硬件三、接线四、驱动电机1、TB6612电机驱动2、定时器的PWM模式驱动电机五、编码器测速1、定时器的编码器接口模式2、定时器编码器模式测速的原理3、编码器模式的配置4、编码器模式相关代码5、测速方法六、相关问题以及解答1、编码…...
【JS】常用js方法
1、判断是否是数组、字符串等方法a instanceof ba是你需要判断的数据b是判断的类型//直接判断原型 var a [1,5,8] var b 123456console.log(a instanceof Array)//true console.log(a instanceof String)//falseconsole.log(b instanceof String)//true2、分割字符串a.split(…...
Android---动态权限申请
目录 权限分类 动态权限核心函数 简易实现案例 完整代码 Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权限分类 系统权限分为两类:正常…...
【Linux】环境变量(基本概念 常见环境变量 测试PATH 环境变量相关命令)
文章目录环境变量基本概念常见环境变量测试PATH别的环境变量通过系统调用获取或设置环境变量环境变量相关命令export: 设置一个新的环境变量set: 显示本地定义的shell变量和环境变量unset: 清除环境变量通过代码如何获取环境变量环境变量 基本概念 环境变量(environment vari…...
安全牛+瑞数信息:《数据安全管控平台应用指南》报告共同发布
随着《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》和《关键信息基础设施安全保护条例》“三法一条例”的陆续发布,从国家、社会与个人已经逐步形成了加强数据安全保护的态势。 2023年1月中旬,工业和信息化…...
【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(6)
目录 写在前面: 题目:P1683 入门 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: 代码: AC &a…...
论文解读TCPN
一、简要介绍视觉信息提取(VIE)近年来受到了越来越多的关注。现有的方法通常首先将光学字符识别(OCR)结果组织成纯文本,然后利用标记级实体注释作为监督来训练序列标记模型。但是,它花费大量的注释成本&…...
性能优化之防抖与节流
(一)防抖 (1)定义:单位事件内,频繁触发,只执行最后一次(像王者荣耀的回城操作) (2)使用场景:搜索输入框、手机号邮箱输入检测 &…...
数组模拟单链表
实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 k个插入的数后面的数; 在第 k个插入的数后插入一个数。 现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整…...
蓝桥杯刷题第十四天
第二题:不同子串题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串 a, b, aa, ab, aaa, aa…...
面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
包含的模块:本文分为十九个模块,分别是:软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以看文末获取方式…...
Activiti 工作流简介
1、什么是工作流 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 1.2、工作…...
【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
文章目录 前言题目描述输入描述输出描述题目解析参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
