推荐:Spring Boot(2): 配置文件剖析

SpringBoot多环境配置 dev、test、prod 只要愿意改变,何时都不晚。 前言 在项目还处于快速迭代的时候, 我们一般需要写两套或者三套配置, 开发的时候使用开发环境的配置, 测试的时候使用测试环境的配置, 生产的时候使用生产环境的配置。 这很合理,省去了每次手写配置的麻烦。 但问题在于,在使用本文的多环境配置方案之前, 管理配置的时候, 或通过注释, 或复制文件, 如果有时候忘记修改就推完下一环节, 比如开发完成推往测试环境部署测试, 结果发现配置未修改, 就需要在开发环境上再次进行打包, 打包完成后再发完测试。 这无形之中增加了很多工作量和心理. 阅读详情

上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。所以,我们要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的默认配置,这就需要了解Spring Boot的配置文件application.properties。

正文

Spring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下。Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。

接下来,让我们一起来解开配置文件的面纱。

注:如果你工程没有这个application.properties,那就在src/main/java/resources目录下新建一个。

自定义属性

application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:

然后直接在要使用的地方通过注解@Value(value="${config.name}")就可以绑定到你想要的属性上面

我们启动工程输入http://localhost:8080 就可以看到打印了"嘟嘟MD祝大家鸡年大吉吧"。

有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个ConfigBean.java类,顶部需要使用注解@ConfigurationProperties(prefix = "com.dudu")来指明使用哪个

这里配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写ConfigBean.class,在bean类那边添加

最后在Controller中引入ConfigBean使用即可,如下:

参数间引用

在application.properties中的各个参数之间也可以直接引用来使用,就像下面的设置:

这样我们就可以只是用yearhope这个属性就好

使用自定义配置文件

有时候我们不希望把所有配置都放在application.properties里面,这时候我们可以另外定义一个,这里我明取名为test.properties,路径跟也放在src/main/resources下面。

我们新建一个bean类,如下:

这里要注意哦,有一个问题,如果你使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样:

但是1.5版本后就没有这个属性了,找了半天发现添加@Configuration和@PropertySource("classpath:test.properties")后才可以读取。

随机值配置

配置文件中${random} 可以用来生成各种不同类型的随机值,从而简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串。

外部配置-命令行参数配置

Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:

可以以下命令修改tomcat端口号:

可以看出,命令行中连续的两个减号--就是对application.properties`中的属性值进行赋值的标识。

所以java -jar xx.jar --server.port=9090等价于在application.properties中添加属性server.port=9090。

如果你怕命令行有风险,可以使用SpringApplication.setAddCommandLineProperties(false)禁用它。

实际上,Spring Boot应用程序有多种设置途径,Spring Boot能从多重属性源获得属性,包括如下几种:

1.根目录下的开发工具全局设置属性(当开发工具激活时为`~/.spring-boot-devtools.properties`)。

2.测试中的@TestPropertySource注解。

3.测试中的@SpringBootTest#properties注解特性。

4.命令行参数

5.SPRING_APPLICATION_JSON中的属性(环境变量或系统属性中的内联JSON嵌入)。

6.ServletConfig初始化参数。

7.ServletContext初始化参数。

8.java:comp/env里的JNDI属性

9.JVM系统属性

10.操作系统环境变量

11.随机生成的带random.* 前缀的属性(在设置其他属性时,可以应用他们,比如${random.long})

12.应用程序以外的application.properties或者appliaction.yml文件

13.打包在应用程序内的application.properties或者appliaction.yml文件

14.通过@PropertySource标注的属性源

15.默认属性(通过`SpringApplication.setDefaultProperties`指定).

这里列表按组优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性,列如我们上面提到的命令行属性就覆盖了application.properties的属性。

 

配置文件的优先级

application.properties和application.yml文件可以放在一下四个位置:

- 外置,在相对于应用程序运行目录的/congfig子目录里。

- 外置,在应用程序运行的目录里

- 内置,在config包内

- 内置,在Classpath根目录

同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:

此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。

Profile-多环境配置

当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。

如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。

这里我们来模拟一下,只是简单的修改端口来测试。

在Spring Boot中多环境配置文件名需要满足`application-{profile}.properties`的格式,其中`{profile}`对应你的环境标识,比如:

- application-dev.properties:开发环境

- application-prod.properties:生产环境

想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。

当然你也可以用命令行启动的时候带上参数:

我给不同的环境添加不同的端口属性server.port,然后根据指定不同的spring.profiles.active来切换使用。各位可以自己试试。这里就不贴代码了。

除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,例如数据库配置,这里我们先定义一个接口:

分别定义俩个实现类来实现它

通过在配置文件激活具体使用哪个实现类

然后就可以这么用了

除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile

 

总结 

这次对Spring Boot中application.properties配置文件做的整理总结希望对大家有所帮助,最后贴上Spring Boot中常用的配置属性,需要的时候可打开查找。

常用属性汇总](http://tengj.top/2017/02/28/springbootconfig/)

SpringBoot学习之路(五)——Profile多环境配置 Profile多环境配置 在实际开发中,应用程序通常需要部署到不同的运行环境中如开发环境、测试环境、生产环境等。不同的环境可能使用不同的配置,如果每次部署都去手动修改配置文件,显然是一件非常麻烦的事。因此SpringBoot提供了两种多环境配置的方式,分别是使用profile文件进行多环境配置以及使用@Profile注解进行多环境配置 激活环境配置方式 1、在控制台运行下列命令激活环境配置 java -jar xxx.jar --spring.profiles.active=profli... 阅读详情

相关推荐

【Spring Boot 与 Spring Cloud 深度 Mape 之一】剖析 Spring Boot 核心:从快速构建到自动配置原理与实战

起步依赖 (Starters):通过聚合依赖和版本管理,极大地简化了项目依赖配置。自动配置 (Auto-Configuration):利用和注解,根据项目依赖智能装配 Bean,减少了大量样板代码。统一配置管理:通过yml文件以及 Profile 机制,实现了灵活、强大的应用配置。同时,我们也学习了如何快速搭建 Spring Boot Web 应用,并利用Actuator对应用进行基本的监控与管理。掌握这些基础是理解后续 Spring Cloud 微服务治理组件的前提。

weixin_52568491的博客 1076

05全局配置文件application.properties详解

Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目也能顺利的运行起来。当然,用户也可以根据自身的需要使用配置文件修改 Spring Boot 的默认设置。 SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。 application.properties application.yml application.properties与 applicatio......

qq_41946216的博客 2万+

Java配置文件全解析:从Properties到YAML,Spring Boot配置实战指南

在软件工程中,配置文件是实现应用外部化配置和解耦的核心机制,它允许开发者在不修改代码的情况下调整程序行为。其原理是将可变参数从硬编码中剥离,存储于外部文件,通过特定格式(如键值对、标记语言)进行组织。这一技术价值在于提升应用的灵活性、可维护性和环境适应性,广泛应用于数据库连接、服务端口、日志级别等场景的配置管理。在Java生态中,配置文件格式历经演变,从基础的Properties文件到结构化的XML,再到如今Spring Boot推崇的YAML,每种格式都有其适用场景。本文聚焦于**Spring Boot配

weixin_34218890的博客 467

java:application.properties的详细使用以及区分环境

java:application.properties的详细使用以及区分环境

分享前端开发工程师的一些日常生活、前端知识点、职业发展、对一些问题的看法、感悟等等 6876

Spring Boot配置文件密码加密实战:Jasypt集成与安全加固指南

在应用开发中,敏感信息(如数据库密码)的安全管理是基础且关键的环节。其核心原理在于通过加密算法对明文信息进行转换,确保即使配置文件泄露,攻击者也无法直接获取原始内容。这项技术的核心价值在于实现安全性与便利性的平衡,它允许开发者在代码库中安全地存储配置,而解密密钥则通过更安全的外部渠道(如环境变量)管理。在Spring Boot等Java应用框架中,这通常通过集成专门的加密库来实现,以满足生产环境对数据安全与合规性的要求。本文聚焦于Jasypt这一轻量级解决方案,深入剖析其与Spring Boot的集成流程、

过客阵营 -- 简单的就要最简单 621

Spring Boot配置文件加密实战:Jasypt集成与安全密钥管理

在应用开发中,配置管理是连接代码与运行环境的关键环节,尤其涉及数据库密码、API密钥等敏感信息时,其安全性至关重要。配置加密的核心原理是在配置加载阶段,对特定格式的密文进行实时解密,确保业务代码获取的是明文,而存储介质中仅为密文,从而有效防止源码泄露或交付物被反编译导致的敏感信息暴露。这项技术的核心价值在于以非侵入方式提升应用安全基线,实现开发、测试、生产环境配置的一致性管理。常见的应用场景包括微服务架构下的配置安全、云原生部署以及满足企业安全合规要求。本文聚焦于Spring Boot项目,深入解析如何通过

jardownload的博客 361

深入后端:Spring Boot 配置文件的高级用法

Spring Boot 作为一款简化 Spring 应用开发的框架,配置文件在其中起着至关重要的作用。本文章的目的在于深入探讨 Spring Boot 配置文件的高级用法,帮助开发者更好地利用配置文件来管理应用的各种参数和设置。范围涵盖了常见的配置文件格式(如 properties 和 YAML),以及如何在不同环境下使用配置文件、配置文件的加密解密、配置文件的加载顺序等高级特性。本文将按照以下结构进行阐述:首先介绍核心概念与联系,让读者了解配置文件的基本原理和架构;

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1086

深入解析mvn spring-boot:run命令:从Maven插件到Spring Boot应用启动全流程

在Java企业级开发中,Maven作为核心构建工具,通过其插件机制实现了项目依赖管理与构建流程的自动化。其生命周期模型与插件目标(Goal)的协作原理,为现代Java应用提供了标准化的构建范式。Spring Boot Maven插件在此基础上,通过分叉(Fork)JVM进程、智能构建类路径(Classpath)等工程实践,将“约定大于配置”的理念落地,极大地提升了开发效率。这一技术组合的价值在于,它统一了开发与构建环境,使得开发者能通过一条简单的命令行指令,即可完成从代码编译、资源处理到应用启动的完整链路。

aizexi2652的博客 356

Spring Boot音乐推荐系统:从环境搭建到算法解析的毕设实战指南

推荐系统作为现代互联网应用的核心技术之一,其基本原理是通过分析用户历史行为数据,预测用户可能感兴趣的物品,从而实现个性化内容分发。在技术实现上,推荐算法主要分为基于内容的推荐、协同过滤以及混合推荐等类型,它们通过计算用户或物品之间的相似度来生成推荐列表。从工程实践角度看,一个完整的推荐系统需要前后端分离的架构支持,并涉及数据库设计、业务逻辑实现和算法集成等多个环节。对于计算机专业的学生而言,基于Spring Boot框架构建一个音乐推荐系统,是理解Web应用开发全流程、掌握推荐算法落地应用的绝佳实践。本文以

weixin_34090562的博客 321

java之ssm框架部署即可用

ssm框架,已经配置好了PageHelper分页功能,下载后根据实际情况修改db.properties的数据库,部署即可用,适合初学者使用,省去了搭建并调试框架的繁琐步骤

Ansys Zemax | 公差分析中的补偿器优化:如何提升系统良率?

本文深入探讨了在Ansys Zemax公差分析中如何有效设置与优化补偿器以提升系统良率。文章指出,补偿器是连接理想设计与现实生产的关键,通过模拟实际装配中的调整(如后焦距),能显著改善公差分析的“悲观”预测。详细介绍了补偿器的添加方法、多补偿器策略、评价函数设计以及通过灵敏度分析和蒙特卡洛档案优化补偿效果,旨在帮助光学工程师制定更符合生产实际的公差策略,从而有效提升产品良率。

weixin_28419039的博客 619

Spring Boot配置文件:Properties与YAML

对象/Map(键值对集合)语法:通过层级缩进表示对象的属性。以用户信息配置为例:user: # 对象名name: Tom # 属性1age: 18 # 属性2gender: 男 # 属性3- **等效于Java对象**:上述YAML配置在Java中可以等效为以下对象定义:private String gender = "男";通过这种对比,我们能清楚看到YAML配置与Java对象结构之间的对应关系,方便开发者在两种语言之间进行转换和理解。2.数组/List/Set(元素集合)语法。

2401_86968005的博客 1240

Meta-RL之Meta-Gradient Reinforcement Learning

这篇文章是用元学习算法去学习RL的超参数η={γ,λ}\eta=\{\gamma,\lambda\}η={γ,λ}。当然不仅限于这2个超参数,还可以是和回报相关的超参数。 本文的核心思想:我们之前接触过Meta-Learning参数的初始化(MAML、Reptile)以及Meta-Learning参数的更新优化(L2L-by-gd-by-gd、Opt as a model for few-shot learning),那么这篇就是能否Meta-Learning到η={γ,λ}\eta=\{\gamma,\l

Ton的博客 2520

Spring Boot多模块打包进阶:剖析spring-boot-maven-plugin的依赖陷阱与双包策略

本文深入解析Spring Boot多模块项目中spring-boot-maven-plugin的依赖陷阱与双包策略。通过分析repackage机制导致的"Package does not exist"问题,提出使用classifier属性生成可执行jar与可依赖jar的解决方案,并分享多模块项目的最佳实践与配置建议,帮助开发者高效管理复杂项目结构。

weixin_34269583的博客 349

SAP ABAP实战:手把手教你用BAPI_BILLINGDOC_CREATEMULTIPLE批量开票(附完整代码与避坑指南)

本文详细解析了SAP ABAP中BAPI_BILLINGDOC_CREATEMULTIPLE批量开票的全流程,包括参数配置、事务控制、错误处理及性能优化。通过实战案例和完整代码示例,帮助开发者高效处理大批量发票生成任务,避免常见陷阱,提升开发效率。

weixin_34101914的博客 265

LLaVA-1.5:多模态视觉问答新突破

LLaVA-1.5在多模态视觉问答(VQA)任务中取得了显著进展,主要得益于视觉-语言连接器的优化和特定任务数据集的增加。通过将连接器升级为两层MLP,模型在处理视觉与语言关系时表现更佳。同时,引入如OKVQA、OCRVQA等数据集,增强了模型在复杂视觉推理任务中的能力。在11个基准测试中,LLaVA-1.5超越了现有方法,展示了其强大的多模态能力。此外,模型通过提升输入图像分辨率、扩展语言模型和改进多语言能力,进一步提升了性能。尽管在短格式回答任务中初期表现不佳,但通过调整提示格式和微调,其性能显著提升

weixin_57060548的博客 945

探索Spring Boot新境界:spring-boot-support项目深度剖析

探索Spring Boot新境界:spring-boot-support项目深度剖析 一、项目介绍 在Java开发的璀璨星空中,Spring Boot犹如一颗耀眼的明星,以其简洁高效的特点引领着微服务发展的潮流。而现在,我们有幸向您推荐——spring-boot-support项目,这是一片专为春靴(Spring Boot)量身定制的支持矩阵,旨在进一步简化开发流程,提升应用性能,让开发者在构建现...

gitblog_00053的博客 587

【Excel VBA 编程】批量核对两张表格数据,行和列显示顺序均被打乱

利用数据字典在 Excel 中进行表格数据的核对,该表格含有多行多列,并且行和列顺序是打乱的,批量核对数据后将差异输出

wei1019的专栏 1291

推荐项目:Spring Boot 博客演示平台

推荐项目:Spring Boot 博客演示平台 在当今快速发展的技术世界中,一个简洁高效的博客系统是分享知识和技术见解的必备工具。今天,我们来探讨一款基于Spring Boot生态的开源博客开发示例——Spring Boot Blog Demo。这款项目不仅展示了如何利用现代Web框架快速构建应用,同时也为那些希望掌握Spring Boot实战技巧的开发者提供了一个完美的实践案例。 项目介绍 Sp...

gitblog_00855的博客 1020

2025.06.18【转录组】|Ribo-seq/small RNA数据分析:rRNA和smRNA比对率统计全流程

本文介绍了一种自动化统计rRNA/smRNA比对率的方法,用于评估Ribo-seq或small RNA测序数据的质量。主要内容包括:分析原理(比对率定义、参考序列来源)、实践流程(构建索引、比对统计)以及结果可视化方法。通过Python和R脚本实现自动化处理,可生成汇总表格和柱状图。比对率结果能反映样品污染程度,建议控制在20%以下。该流程有助于快速评估测序质量,为后续分析提供可靠依据。文中还提供了常见问题解决方案和脚本示例,适用于生物信息学标准化质控环节。

1615

单片机:实现FFT快速傅里叶变换算法(附完整源码)

单片机:实现FFT快速傅里叶变换算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1099

深度剖析:5个实战技巧解决Redisson与Spring Boot版本冲突问题

Redisson作为基于Redis的Java客户端,提供了丰富的分布式数据结构和服务,而Spring Boot则是快速开发Java应用的主流框架。当这两个强大工具相遇时,版本兼容性问题可能会成为开发路上的拦路虎。本文将分享5个实用技巧,帮助开发者快速定位和解决Redisson与Spring Boot的版本冲突问题,确保项目顺利运行。 ## 问题场景:当Redisson遇到Spring Boot的

gitblog_00681的博客 723

Cesium雷达追踪追踪(圆锥体效果)

【代码】Cesium雷达追踪追踪(圆锥体效果)

God's asylum的博客 2931

Spring Boot加载与Bean处理的细节剖析

SpringBoot启动优化全流程解析 摘要:本文系统梳理了SpringBoot启动全流程的核心环节与优化策略。启动流程以SpringApplication#run方法为主线,通过监听器机制跟踪starting、environmentPrepared等6个关键阶段。在Bean处理方面,详细解析了实例化、依赖注入的生命周期管理,并提出了延迟加载(@Lazy)、异步初始化(@Async)等优化方案。针对配置文件加载,建议采用拆分策略和按需加载机制。此外,文章还涵盖线程池优化、监控体系搭建(Actuator)、日

weixin_38436441的博客 1230

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机毕设Springboot旅游景点推荐系统 基于Spring Boot框架的智能旅游景点推荐平台设计与实现 Spring Boot驱动的旅游目的地个性化推荐系统开发

计算机毕设Springboot旅游景点推荐系统lwb10594 (配套有源码 程序 mysql数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联xi 可分享随着人们生活水平的提高,旅游已成为现代生活不可或缺的一部分。然而,面对众多的旅游景点,如何快速找到符合个人兴趣和需求的目的地,成为许多游客面临的难题。传统的旅游信息获取方式往往缺乏个性化和针对性,无法满足游客多样化的需求。因此,开发一个能够根据用户偏好、历史行为等数据提供个性化旅游景点推荐的系统,显得尤为重要。

一念计算机毕设源码程序 2778

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机毕业设计Springboot音乐推荐系统 基于Spring Boot的音乐推荐系统 基于Spring Boot的智能音乐推荐平台

计算机毕业设计Springboot音乐推荐系统ysw2s271(配套有源码 程序 mysql数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联xi 可分享在当今数字化时代,音乐已经成为人们生活中不可或缺的一部分。随着音乐资源的海量增长,用户面临着“选择困难症”的问题——如何在海量的音乐库中找到真正适合自己的音乐?基于Spring Boot的智能音乐推荐平台应运而生,旨在通过先进的算法和用户行为分析,为用户提供个性化、精准的音乐推荐服务。

光冯毕设程序 1272

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Spring Boot(1): 开山demo
下一篇: IDEA Lombok 使用
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值