Java_Springboot核心配置详解

Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。
一、Spring Boot中的两种配置文件格式
Spring Boot官方提供了两种常用的配置文件格式:properties和YAML(yml)。这两种格式各有特点,可以根据项目需求选择合适的格式。
- properties文件
properties文件是一种传统的配置文件格式,以“key=value”的形式存储配置信息。例如:
properties
| server.port=8080 | |
| spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase | |
| spring.datasource.username=root | |
| spring.datasource.password=password |
properties文件的特点如下:
1文件结构简单,易于理解和编辑。
2只支持键值对,不支持复杂的嵌套结构。
3不保证加载顺序,适用于简单的配置需求。
2.YAML文件
YAML(YAML Ain't Markup Language)是一种直观的、易于人类阅读和编写的数据序列化格式。YAML文件以“key: value”的形式存储配置信息,支持复杂的嵌套结构和列表。例如:
yaml
| server: | |
| port: 8080 | |
| spring: | |
| datasource: | |
| url: jdbc:mysql://localhost:3306/mydatabase | |
| username: root | |
| password: password |
YAML文件的特点如下:
- 层次结构清晰,易于表达复杂的配置信息。
- 支持字面量、对象和数组三种数据结构,以及复合结构。
- 大小写敏感,缩进表示层级关系,不能使用Tab键代替空格。
在Spring Boot项目中,YAML文件通常命名为application.yml或application.yaml,并放置在src/main/resources目录下。
二、Spring Boot基础注解的方式实现配置
Spring Boot提供了多种注解来简化配置过程,其中@Value和@ConfigurationProperties是两个常用的注解。
1.@Value注解
@Value注解用于将配置文件中的值注入到Spring Bean的属性中。例如:
java
| @Component | |
| public class DatabaseConfig { | |
| @Value("${spring.datasource.url}") | |
| private String dbUrl; | |
| @Value("${spring.datasource.username}") | |
| private String dbUsername; | |
| @Value("${spring.datasource.password}") | |
| private String dbPassword; | |
| // 省略getter和setter方法 | |
| } |
@Value注解可以读取properties和YAML文件中的配置值,并注入到指定的属性中。需要注意的是,@Value注解不支持复杂的数据类型,如List、Map等。
2.@ConfigurationProperties注解
@ConfigurationProperties注解用于将配置文件中的值批量注入到Spring Bean的属性中,并支持复杂的数据类型。例如:
java
| @Component | |
| @ConfigurationProperties(prefix = "spring.datasource") | |
| public class DatabaseConfig { | |
| private String url; | |
| private String username; | |
| private String password; | |
| // 省略getter和setter方法 | |
| } |
在上面的例子中,@ConfigurationProperties注解将spring.datasource前缀下的配置值注入到DatabaseConfig类的属性中。与@Value注解相比,@ConfigurationProperties注解更加灵活和强大,支持松散绑定、JSR303数据校验和复杂类型封装等特性。
三、自定义配置
除了使用Spring Boot默认的配置文件外,还可以通过自定义配置类的方式来管理配置项。自定义配置类通常使用@Configuration和@ConfigurationProperties注解进行标注。
1.创建自定义配置类
创建一个自定义配置类,并使用@Configuration和@ConfigurationProperties注解进行标注。例如:
java
| @Configuration | |
| @ConfigurationProperties(prefix = "myapp") | |
| public class MyAppConfig { | |
| private String apiUrl; | |
| private String apiKey; | |
| // 省略getter和setter方法 | |
| } |
在上面的例子中,MyAppConfig类用于管理myapp前缀下的配置项。
2.使用自定义配置类
在需要使用自定义配置类的地方,通过@Autowired注解将其注入到Spring Bean中。例如:
java
| @Component | |
| public class MyApiClient { | |
| private final MyAppConfig appConfig; | |
| @Autowired | |
| public MyApiClient(MyAppConfig appConfig) { | |
| this.appConfig = appConfig; | |
| } | |
| public void callApi() { | |
| String apiUrl = appConfig.getApiUrl(); | |
| String apiKey = appConfig.getApiKey(); | |
| // 使用配置的API URL和API Key进行操作 | |
| } | |
| } |
在上面的例子中,MyApiClient类通过构造函数注入MyAppConfig对象,并在callApi方法中使用配置信息。
四、多环境配置
在实际开发中,通常需要为不同的环境(如开发、测试、生产)配置不同的参数。Spring Boot提供了多环境配置的功能,可以根据不同的环境加载不同的配置文件。
1.创建多环境配置文件
在src/main/resources目录下创建多个以application-{profile}.properties或application-{profile}.yml命名的配置文件,其中{profile}表示环境名称。例如:
- application-dev.properties(开发环境)
- application-test.properties(测试环境)
- application-prod.properties(生产环境)
或者:
1.application-dev.yml(开发环境)
2.application-test.yml(测试环境)
3.application-prod.yml(生产环境)
2.指定活动环境
在启动Spring Boot应用时,可以通过spring.profiles.active属性来指定当前活动的环境。例如:
shell
| java -jar myapp.jar --spring.profiles.active=dev |
或者,在application.properties或application.yml文件中指定默认的活动环境:
properties
| spring.profiles.active=dev |
yaml
| spring: | |
| profiles: | |
| active: dev |
- 加载多环境配置
Spring Boot会根据指定的活动环境加载相应的配置文件,并覆盖默认配置文件中的相同配置项。例如,如果开发环境的数据库连接信息与默认配置不同,可以在application-dev.properties或application-dev.yml文件中进行配置。
五、总结
Spring Boot的核心配置是应用启动和运行的基础。本文详细介绍了Spring Boot中的两种配置文件格式(properties和YAML)、基础注解的配置方式(@Value和@ConfigurationProperties)、自定义配置以及多环境配置。通过合理使用这些配置方式,可以简化开发流程、提高开发效率,并增强应用的灵活性和可维护性。
相关文章:
Java_Springboot核心配置详解
Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。 一、Spring Bo…...
太速科技-9-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡
基于DSP TMS320C6678FPGA XC7V690T的6U VPX信号处理卡 一、概述 本板卡基于标准6U VPX 架构,为通用高性能信号处理平台,系我公司自主研发。板卡采用一片TI DSP TMS320C6678和一片Xilinx公司Virtex 7系列的FPGA XC7V690T-2FFG1761I作为主处理器&#…...
在线UI设计工具:创意与效率的结合
随着UI设计领域的快速增长,设计师们纷纷投身于这一行业,选择一款合适的UI设计工具变得至关重要。除了经典的UI设计软件,在线UI设计工具因其灵活性和便捷性,越来越受到设计师们的喜爱。这种不受时间和地点限制,且不依赖…...
【MyBatis源码】SqlSessionFactoryBuilder源码分析
文章目录 概述类结构从 InputStream 创建 SqlSessionFactoryXMLConfigBuilder构建ConfigurationXMLConfigBuilder初始化方法parse()方法parseConfiguration属性(properties) 概述 SqlSessionFactory 是 MyBatis 的核心接口之一,提供创建 Sql…...
Percona XtraBackup数据备份方案
一、简介 官方文档:https://docs.percona.com/percona-xtrabackup/innovation-release/index.html Percona XtraBackup 是一款适用于基于 MySQL 的服务器的开源热备份实用程序,可让您的数据库在计划的维护时段内保持完全可用。无论是 24x7 高负载服务器还是低交易量服务器,…...
聚“芯”而行,华普微亮相第五届Silicon Labs Works With大会
2024年10月24日,由致力于以安全、智能无线连接技术建立更互联世界的全球领导厂商Silicon Labs主办的第五届Works With开发者大会在上海雅乐居万豪侯爵酒店成功举办。 作为全球性的物联网年度“盛宴”,本届大会群英荟萃,不仅有着来自生态大厂的…...
Java 用户随机选择导入ZIP文件,解压内部word模板并入库,Windows/可视化Linux系统某麒麟国防系统...均可适配
1.效果 压缩包内部文件 2.依赖 <!--支持Zip--><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.11.5</version></dependency>总之是要File类变MultipartFile类型的 好像是…...
【C++】C++17结构化绑定、std::optional、std::variant、std::any
二十二、C17中的结构化绑定、std::optional、std::variant、std::any 本部分是一个小系列,介绍C17中新引入的、用来解决各种不同返回情况的、标准库新组件。 1、C的结构化绑定 结构化绑定structured bindings是C17中引入的一项特性,它允许开发者方便地…...
C#的起源。J++语言的由来?J#和J++傻傻分不清?
C#的起源 C#读音是C Sharp, 它是微软为了对抗Java而生,最早是J,效率比Java还好,后来被Sun公司起诉J破坏了平台无关性,微软重新开发C#. C#和Java一样都定位为中间件语言,用虚拟机执行编译的字节码以达到跨平台目的。从语…...
Flutter 在 对接 google play 时,利用 android studio 可视化生成 已签名的aab包
android studio 可视化生成 aab包 第一 : 先说注意事项 在Flutter项目里面,直接打开当前项目是不行的,不显示相应操作,需要在Android 目录打开,直白点就是直接打开项目里面的Android 目录 不然会出现的一些问题 第一…...
使用web.dev提供的工具实现浏览器消息推送服务
文章目录 前言实现工具和效果实现原理实现过程前端接收用户订阅请求将用户订阅信息更新到后端后端实现接收并保存订阅信息的接口后端实现消息推送的逻辑前言 对于电商独立站来说,新品上架或者促销活动上线及时通知到用户是很重要的,通知的渠道有很多,其中就包括浏览器消息推…...
计算机系统结构为什么用architecture 而不是structure?
architecture本意是建筑学、建筑艺术,其含义就是建筑的样子和背后的设计思想,用于计算机科学可以表达计算机的系统结构和后面的设计原理:它长什么样?它为什么长这样? 与architecture 对应的词是structure (…...
sqoop问题汇总记录
此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新,有问题评论区一起探讨,写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…...
Git 创建新的分支但清空提交记录
有时候需要创建新的分支,但是原有分支的提交非常多,不好区分哪些是创建分支之后的提交。 那么就把原分支的提交全部去掉 要从 分支1 创建 分支2,并确保 分支2 不包含任何提交历史,同时文件与 分支1 的最后一次提交一致࿰…...
SQL PRIMARY KEY
SQL PRIMARY KEY 概述 在关系型数据库中,主键(PRIMARY KEY)是一个非常重要的概念。它是表中每一行数据的唯一标识符,用于保证数据的完整性和准确性。本文将详细介绍SQL中的主键,包括其定义、作用、如何创建和修改主键…...
软件测试学习笔记丨Flask操作数据库-对象与数据模型
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23440 对象与数据模型 数据模型:是数据特征的抽象,抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架…...
IntelliJ IDEA使用 MybatisX-Generator 插件 自动生成Entity+Mapper+Mapper.xml等代码
一、Intellij安装MybatisX插件: 首先点击 Intellij->Preference->Plugins,然后搜索MybatisX,点击安装: 2 打开数据库 在IntelliJ IDEA 连接Mysql数据库,选择表,点击右键,选择 Mybatis…...
vue中如何为不同功能设置不同的默认打印设置(设置不同的打印机)
浏览器自带的window.print 功能较简单,这里使用LODOP露肚皮打印 以下是vue2示例: 从官网中下载Lodop和C-Lodop官网主站安装包并安装到本地电脑可以全局搜索电脑找到安装文件LodopFuncs.js,也可以直接复制我贴出来的文件 //用双端口加载主JS…...
经纬恒润INTEWORK-VBA新版本正式发布
在汽车电子研发领域,随着开发测试的深入,工程师们常常面临着一个共同的问题:如何高效地在多样化的开发测试场景中切换,并确保不同工具间的紧密协作。不同场景、不同工具的切换与使用给工程师带来高昂的学习成本和前后端信息传递的…...
金蝶云数据集成至MySQL的高效解决方案
金蝶云数据集成至MySQL的高效解决方案 金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化过程中,数据的高效集成和管理是关键环节。本文将聚焦于一个具体的系统对接集成案例:金蝶云星空的数据如何通过轻易云数据集成平台无缝对接到MySQL数据库。本…...
从空调到电动车:拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’
从空调到电动车:拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’ 你有没有想过,为什么手机快充时充电头不会烫到冒烟?汽车座椅加热为什么不会越坐越烫?这些看似简单的日常体验背后,其实都藏着一对神奇的电子元件…...
简易的分布式kv设计
1. 前言 在 Raft KV 系统中,每个节点(Node)都是对等的。一个典型的请求流向是: Client -> Leader Node -> Raft 日志同步 -> 大多数节点确认 -> 应用到状态机 (KV Store) -> 返回 Client。 2. 设计步骤 Raft 核…...
OpenClaw学习助手:Qwen3.5-9B驱动的知识整理与习题生成
OpenClaw学习助手:Qwen3.5-9B驱动的知识整理与习题生成 1. 为什么需要AI学习助手? 去年备考PMP认证时,我每天要处理上百页PDF讲义。最痛苦的不是阅读,而是如何把关键知识点转化成可记忆的卡片和练习题。手动整理不仅耗时&#x…...
Go语言的性能优化:从分析到实践
Go语言的性能优化:从分析到实践 性能优化的重要性 在软件开发中,性能优化是一个永恒的话题。一个高性能的应用程序可以: 提高用户体验,减少响应时间降低服务器成本,提高资源利用率增强系统的可扩展性提升应用程序的竞争…...
【芯片后仿(Post-Silicon Simulation)完全指南:从入门到流片前的最后一道防线】
一、什么是后仿?为什么要做后仿?后仿,全称Post Netlist Simulation(Post-Sim)或Gate Level Simulation(GLS),是指在RTL代码综合成门级网表后,通过反标SDF(Sta…...
【ABAP】客转供 客户转供应商 cl_md_bp_maintain=>maintain 创建供应商
报错:未分配客户/供应商,您无法传输客户/供应商数据 这是因为如果创建的时候是作为客户的, 后面想要创建为供应商,所以调用的供应商创建/修改接口。 但是这时候,LFA1里面是没有供应商编号的,只有BUT000里面…...
Spring AI 助力 Java 开发者构建全功能 AI 智能体
【导语:随着人工智能的迅速发展,Java 开发者在将 AI 能力集成到基于 Spring 的应用程序方面选择有限。Spring AI 的出现改变了这一局面,本文详细介绍了如何使用 Spring AI 构建基于 Java 的全功能 AI 智能体。】Spring AI 打破 Java 集成 AI …...
AA-PEG-C12/C16/C18,乙酸聚乙二醇月桂/棕榈/硬脂酸酯,一类结合了乙酸、聚乙二醇和长链烷基的化合物
一.名称英文名称:AA-PEG-C12/C16/C18,Acetic Acid-PEG-C12/C16/C18中文名称:乙酸聚乙二醇月桂/棕榈/硬脂酸酯,乙酸-PEG-月桂/棕榈/硬脂酸酯分子量:1k,2k,3.4k,5k,10k&…...
考研408计算机学科专业基础综合——计算机网络复习
考研408计算机学科专业基础综合 计算机网络复习 核心说明:本笔记聚焦考研408计算机网络高频考点、必背知识点,贴合命题规律(选择题为主、大题集中在核心协议),剔除冗余内容,突出重难点,适配冲刺…...
EVA-01应用实战:5个场景教你用Qwen2.5-VL处理工作学习中的图片难题
EVA-01应用实战:5个场景教你用Qwen2.5-VL处理工作学习中的图片难题 1. 引言:当视觉理解遇上机甲美学 想象一下,你正在处理一份满是手写笔记的文档照片,或者需要快速理解一张复杂的数据图表。传统方法可能需要你手动输入文字、反…...
