当前位置: 首页 > 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机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…...

【C++】Google编码风格学习

Google规范线上地址:https://zh-google-styleguide.readthedocs.io/en/latest/ 文章目录1. 头文件2. 作用域3. 类4. 函数5. 其他C特性6. 命名约定7. 注释8. 格式1. 头文件 每个cpp/cc文件都对应一个h头文件,除单元测试代码和只包含main()的文件外。 所…...

JavaScript 中的Promise 函数

JavaScript 中的Promise 函数 目录JavaScript 中的Promise 函数1 创建Promise2 Promise的方法3 Promises的状态4 Promise的使用5 返回 Promise 类型6 Promise级联使用在现在的前端开发中我们常常会使用到 JavaScript Promise 函数,但是很多人都不能正确理解Promise …...

学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】

如果只靠学校学的东西去找工作,能找到工作吗? 今天给大家看一个粉丝的真实求职案例,想做Python方面的工作,投了二十几个简历却没人要,心态崩了。为什么没人要?我来告诉你答案。 然后我还会结合我的这些年的…...

快看!这只猫两次登上 Github Trending !!!

前几天我在逛 Github Trending,无意间发现这个Postcat 登上榜单 !好奇心驱使我去了解这个 Postcat。近期它上新了几个有意思的插件,其中 ChatGPT 插件,用户可以直接省去复杂的流程,直接体验 ChatGPT,懂的都懂&#xff…...

Linux->文件系统初识

目录 前言: 1 认识文件 2 文件使用 2.1 文件加载 2.2 外设文件使用 3 文件接口和文件描述符 3.1 文件系统调用接口 open: 3.2 文件描述符 4 缓冲区 前言: 在大家看这篇文章之前,我得提出几个问题: 1. 我们有多…...

InfluxDB和IotDB介绍与性能对比

InfluxDB简介 InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。用于存储和分析时间序列数据的开源数据库。 适合存储设备性能、日志、物联网传感器等带时间戳的数据,其设计目标是实现分布式和水平伸缩扩展。 InfluxDB 包括用于存储和…...

计算机体系结构(校验码+总线)

校验码计算机系统运行时,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性;二就是是提高代码的校验能力,包括查错和纠错。通常使用校验码的方法检测传送的数据是否出错。这里的校验码主要是指循环冗余校验码&#xff0…...

JavaWeb《三》Request请求转发与Response响应

🍎道阻且长,行则将至。🍓 本文是javaweb的第三篇,介绍了Request请求转发与Response响应。 上一篇:JavaWeb《二》Servlet、Request请求 下一篇:敬请期待 目录一、Request请求转发🍏二、Response对…...

断言assert

assert作用&#xff1a;我们使用assert这个宏来调试代码语法&#xff1a;assert&#xff08;bool表达式&#xff09;如果表达式为false&#xff0c;会调用std::cout<<abort函数&#xff0c;弹出对话框&#xff0c;#include<iostream> #include<cassert> void…...

【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统

目录一、准备工作二、引入依赖三、创建必要的目录四、编写代码五/六、打包部署(直接基于 smart tomcat)七、验证代码正式编写服务器代码编写数据库相关的操作代码创建数据库/表结构(数据库设计)数据库代码封装数据库操作封装针对数据的增删改查&#xff01;博客列表页约定前后端…...