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

Spring Boot 核心配置文件

Spring Boot 核心配置文件

  • 1、application.properties
  • 2、application.yml
    • 使用建议
  • 3、常用配置项
    • 服务器配置
    • 数据库配置
    • 日志配置
    • 其他配置
  • 4、配置文件的加载顺序
  • 5、配置文件的占位符
  • 6、配置文件的动态刷新
  • 7、配置文件的属性分组
    • 定义属性分组
    • 绑定属性分组
    • 使用属性分组
  • 总结


Spring Boot 是一个基于 Spring 框架的快速开发、简化配置、约定优于配置的框架。在 Spring Boot 应用中,核心配置文件是 application.propertiesapplication.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机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中&#xff0…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...