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

spring boot 配置文件和属性注入

文章目录

  • 配置文件
    • 位置和路径
    • 自定义配置文件
  • 属性注入
    • 添加yaml文件的支持

配置文件

位置和路径

当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。按照下面的顺序,四个配置文件的优先级依次降低

  1. 当前项目根目录下的 config 目录下: config/application.properties
  2. 当前项目的根目录下:application.properties
  3. resources 目录下的 config 目录下:src/main/resources/config/application.properties
  4. resources 目录下 src/main/resources/application.properties 推荐

这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。
yaml作为配置文件和properties是一致的。

自定义配置文件

  • spring.config.name
    指定配置文件名,默认的配置文件名是application,可以使用spring.config.name指定自定义文件名,如下示例:

    java -jar myproject.jar --spring.config.name=myproject
    
  • spring.profiles.active
    激活指定的配置文件application-{profile}.properties,指定的配置文件要存放在和application.properties相同的目录
    系统默认加载application-[default].properties配置文件;使用逗号分隔多个profile配置文件;在application配置文件中可以指定待激活的配置文件,示例:

    # 系统会按照顺序加载application-dev.properties、application-test.properties配置文件,后面的配置文件会覆盖前面同名属性配置;
    spring.profiles.active=dev,test
    
  • spring.config.location
    通过 spring.config.location属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找application.properties 文件。

    • 多个配置使用逗号分隔
    • 如果指定的是目录要用/结尾
    # 系统就会自动去指定目录下查找`application.properties`或`application.yml`文件,注意路径以 / 结尾
    java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/xingmu/
    # 如果指定多个配置文件,注意以逗号分割
    

    要特别注意的是,该命令指定的配置文件会使项目默认的application.propertiesapplication.yml文件失效,换句话说该命令会用指定的配置文件替换application.propertiesapplication.yml文件。

  • spring.config.additional-location
    该命令用于追加配置文件。原有的application.properties或application.yml文件均有效。用于和原有配置进行合并

    # 系统就会自动去指定目录下查找`application.properties`或`application.yml`文件,注意路径以 / 结尾
    java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.additional-location=classpath:/xingmu/
    
  • spring.profiles.include

    spring.profiles.active和spring.profiles.include的使用与区别

    指定包含哪些特定配置文件,spring.profiles.active用来指定激活指定的配置文件,而spring.profiles.include可以用来指定激活配置文件还包含哪些配置文件;如:默认配置文件application.properties

    server.port=8003
    # test、prod、publish
    spring.profiles.active=dev
    

    被激活的配置文件是application-dev.properties:

    spring.profiles.include=devDb,devRedis
    

    可以用来指定不同环境之间的切换及不同种类配置的加载。

属性注入

在 resources 下面新建一个 book.properties 文件,内容如下:

book.name=三国演义
book.author=罗贯中
book.id=1
book.tags=小说,演义,历史

项目启动并不会自动的加载 book.properties 该配置文件,如果是在 XML 配置中,可以通过如下方式引用该 properties 文件:


<context:property-placeholder location="classpath:book.properties"/>

在 Java 配置中,可以通过 @PropertySource 来引入配置,这样,当项目启动时,就会自动加载 book.properties 文件。这只是 Spring
中属性注入的一个简单用法,和 Spring Boot 没有任何关系。
@PropertySource默认默认情况下仅仅支持加载外部的、后缀为:properties配置文件,不支持yml、yaml文件。

注意: 在 application.properties 文件中定义属性:按照传统的方式(Spring中的方式),可以直接通过 @Value 注解将这些属性注入到Book 对象中:
注意: Book 对象本身也要交给 Spring 容器去管理,如果 Book 没有交给 Spring 容器,那么 Book 中的属性也无法从 Spring 容器中获取到值。

// classpath:后面不能带有空格
@Component
@PropertySource("classpath:book.properties")
public class Book {@Value("${book.id}")private Long id;@Value("${book.name}")private String name;@Value("${book.author}")private String author;@Value("${book.tags}")private String[] tags;//省略getter/setter
}

Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。使用类型安全的属性注入,可以有效的解决这个问题。
示例代码如下:


@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {private Long id;private String name;private String author;private String[] tags;//省略getter/setter
}

添加yaml文件的支持

新建YamlSourceFactory 实现PropertySourceFactory 接口。

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.springframework.lang.Nullable;import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;public class YamlSourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {Properties propertiesFromYaml = loadYamlIntoProperties(resource);String sourceName = name != null ? name : resource.getResource().getFilename();return new PropertiesPropertySource(sourceName, propertiesFromYaml);}private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {try {YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();factory.setResources(resource.getResource());factory.afterPropertiesSet();return factory.getObject();} catch (IllegalStateException e) {// for ignoreResourceNotFoundThrowable cause = e.getCause();if (cause instanceof FileNotFoundException) {throw (FileNotFoundException) e.getCause();}throw e;}}}

使用


@Component
@PropertySource(value = "classpath:book.yml", factory = YamlSourceFactory.class)
@ConfigurationProperties(prefix = "book")
public class Book {private Long id;private String name;private String author;private String[] tags;//省略getter/setter
}

相关文章:

spring boot 配置文件和属性注入

文章目录 配置文件位置和路径自定义配置文件 属性注入添加yaml文件的支持 配置文件 位置和路径 当我们创建一个 Spring Boot 工程时&#xff0c;默认 resources 目录下就有一个 application.properties 文件&#xff0c;可以在 application.properties 文件中进行项目配置&am…...

springboot+vue私人健身和教练预约管理系统 nt5mp

随着世界经济信息化、全球网络化的到来&#xff0c;信息线上管理的飞速发展&#xff0c;为私人健身和教练预约管理的改革起到关键作用。若想达到安全、快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、畅通、高效的私人健身和教练预约管理系…...

Kotlin基础(十一):反射和注解

前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中&#xff0c;反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。Kotlin为反射提供了一…...

DALLE2论文解读及实现(一)

DALLE2: Hierarchical Text-Conditional Image Generation with CLIP Latents paper: https://cdn.openai.com/papers/dall-e-2.pdf github: https://github.com/lucidrains/DALLE2-pytorch DALLE2概览&#xff1a; - CLIP模型&#xff1a; 用于生成text embedding zt 和image …...

RabbitMQ-API

这里写目录标题 Hello word 模式添加依赖生产者消费者获取信道工具类 Work Queues模式消费者代码 C1开启多线程运行启动 消费者代码 C2生产者代码 消息应答自动应答消息应答的方法Multiple 的解释消息自动重新入队消息手动应答代码消费者API 队列持久化消息持久化不公平分发消息…...

外边距实现居中的写法

1、代码实例 2、默认是贴到左侧对齐的&#xff0c;但我们想要把他贴到中间对齐 3、居中的写法 4、这样就可以保证盒子居中了 5、以上写法仅适于行内元素和行内块元素的写法&#xff0c;有没有什么方法适用于行内块元素&#xff1a;可以添加text-align:center进行添加&#xff0…...

剑指 Offer 20. 表示数值的字符串 (正则 逐步分解)

文章目录 题目描述题目分析法一&#xff1a;完整代码: 法二&#xff1a;完整代码: 题目描述 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者…...

【深度学习】Transformer,Self-Attention,Multi-Head Attention

必读文章&#xff1a; https://blog.csdn.net/qq_37541097/article/details/117691873 论文名&#xff1a;Attention Is All You Need 文章目录 1、Self-Attention 自注意力机制2、Multi-Head Attention 1、Self-Attention 自注意力机制 Query&#xff08;Q&#xff09;表示当…...

CADintosh X for mac CAD绘图软件2D CAD 程序 兼容 M1

CADintosh X for Mac是一个功能强大的2D CAD绘图程序&#xff0c;专为Mac用户设计。它由Lemke Software开发&#xff0c;提供了一套丰富的工具和功能&#xff0c;使用户能够轻松创建高质量的技术图纸&#xff0c;平面图和设计。 CADintosh X for Mac具有直观的用户界面&#x…...

【读书笔记】《厌女》- [日]上野千鹤子 - 2010年出版

不停的阅读&#xff0c;然后形成自己的知识体系。 2023.08. 读 《厌女》- [日]上野千鹤子 - 2010年出版 - 豆瓣读书 文章目录 2023年中文版作者序2015年中文版作者序第一章 喜欢女人的男人的厌女症 2023年中文版作者序 ‘厌女症’的现象本来如‘房间里的大象’&#xff0c;因为…...

Android 从其他xml文件中获取View组件数据

问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中&#xff0c;当用户准备离开当前活动时&#xff0c;可以将 EditText 中的数…...

java 数组的使用

数组 基本介绍 数组可以存放多个同一类型的数据&#xff0c;数组也是一种数据类型&#xff0c;是引用类型。 即&#xff1a;数组就是一组数据。 数组的使用 1、数组的定义 方法一 -> 单独声明 数据类型[] 数组名 new 数据类型[大小] 说明&#xff1a;int[] a new int…...

Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…...

外贸企业选择CRM的三大特点

外贸营销管理CRM云平台可以帮助外贸企业实现更高质量的营销管理和客户管理。无论是销售、市场营销或客户服务团队的成员&#xff0c;CRM都可以帮助企业更好地理解客户需求&#xff0c;并提供更好的服务。 1.便捷轻量级 云平台的一大优势是用户可以随时随地访问数据&#xff0…...

软件测试与游戏测试的区别

软件测试和游戏测试是两种不同领域的测试活动&#xff0c;它们之间存在一些区别&#xff0c;包括以下几个方面&#xff1a; 1. 测试目标 软件测试主要是验证和确认软件功能是否符合预期&#xff0c;通常关注软件的正确性、稳定性和兼容性等方面&#xff1b;而游戏测试则更关注游…...

Programming Abstractions in C阅读笔记:p72-p75

《Programming Abstractions In C》阅读P72-p75&#xff0c;每次阅读其实都有很多内容需要总结&#xff0c;这里摘抄其中一部分。 一、技术总结 1.字符串数组 学习《Programming Abstractions in C》第75页的时候&#xff0c;遇到一段代码&#xff1a; static string bigCitie…...

bash测试test详解

bash测试test详解 概述 任何相对完整的计算机语言都能够测试某个条件&#xff0c;然后根据测试的结果采取不同的动作。对于测试条件&#xff0c; Bash使用test命令、各种方括号和圆括号、if/then结构等来测试条件。 7.1. Test Constructs 一个if/then语句结构测试一个或多个命…...

你来问我来答,ChatGPT对话软件测试!主题互动

你来问我来答&#xff0c;ChatGPT对话软件测试&#xff01; 大家好&#xff0c;我是聪明而有趣的ChatGPT。作为IT专家&#xff0c;我将竭尽全力为你解答技术问题&#xff0c;并提供适合各个级别人群理解的解决方案。无论你是初学者还是专业人士&#xff0c;我都会用智能、简单…...

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备&#xff0c;不仅可以实现无人机的自主充电和电池交换&#xff0c;还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢&#xff0c;本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…...

面试热题(环形链表II)

给定一个链表&#xff0c;返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引…...

Nuki:多芯片组合,覆盖全场景需求

当下“以家庭为中心”的生活趋势&#xff0c;推动了智能家居需求激增&#xff0c;智能门禁作为家庭安全与便捷的核心&#xff0c;却因传统门锁适配性差、智能锁安装繁琐等问题发展受限&#xff0c;设备制造商亟需能简化无线开发、提升能效且满足安全认证的解决方案&#xff0c;…...

Qt多线程数据库操作:安全分离连接,彻底解决段错误

在 Qt 开发中&#xff0c;数据库操作与多线程的搭配是一个经典难题。许多开发者都曾遇到过这样的诡异现象&#xff1a;程序运行一段时间后突然崩溃&#xff0c;堆栈指向数据库操作&#xff0c;但代码逻辑明明正确。真相只有一个——数据库连接被多个线程共享了。本文结合真实项…...

当SPC焕发新生:云质信息重构制造质量管理新范式

传统SPC&#xff1a;那些让人头疼的“老毛病”说实话&#xff0c;很多企业斥巨资引入的SPC软件&#xff0c;实际使用体验与高级版Excel相差无几。数据需手动导入&#xff0c;图表需逐一点选生成&#xff0c;想要进行跨维度分析&#xff0c;更是要先将数据导出&#xff0c;借助其…...

SGLang-v0.5.6优化升级:多GPU协同,推理性能大幅提升

SGLang-v0.5.6优化升级&#xff1a;多GPU协同&#xff0c;推理性能大幅提升 1. 引言 在当今大模型应用日益普及的背景下&#xff0c;推理性能优化成为开发者面临的核心挑战之一。SGLang-v0.5.6作为结构化生成语言框架的最新版本&#xff0c;带来了多项关键性改进&#xff0c;…...

Modbus协议详解:从原理到工业应用实践

1. Modbus协议概述Modbus是一种应用层报文传输协议&#xff0c;由Modicon公司&#xff08;现为施耐德电气旗下品牌&#xff09;于1979年开发。作为工业自动化领域最广泛采用的通信协议之一&#xff0c;它定义了控制器设备之间交换信息的通用语言。关键特性&#xff1a;协议标准…...

爬虫自动化(DrissionPage)

目录 ?一.介绍: 下载DrissionPage,还是我们熟悉的pip&#xff1a; 环境准备&#xff1a; ?二.基本代码&#xff1a; 它对于的导包和类使用&#xff1a; 窗口的设置&#xff1a; 和获取的页面的滑动&#xff1a; 3.进一步认识DrissionPage&#xff1a; 浏览器可以多开…...

PyTorch实战:手把手教你实现MobileFaceNet人脸识别模型(附完整代码)

PyTorch实战&#xff1a;从零构建MobileFaceNet人脸识别系统 人脸识别技术正在从实验室走向日常生活&#xff0c;而MobileFaceNet作为轻量级模型的代表&#xff0c;在移动端和嵌入式设备上展现出惊人的潜力。今天我们将深入探讨如何用PyTorch实现这个高效的神经网络架构&#x…...

实用指南:如何通过Energy Star X轻松提升Windows 11电池续航40%

实用指南&#xff1a;如何通过Energy Star X轻松提升Windows 11电池续航40% 【免费下载链接】EnergyStarX &#x1f50b; Improve your Windows 11 devices battery life. A WinUI 3 GUI for https://github.com/imbushuo/EnergyStar. 项目地址: https://gitcode.com/gh_mirr…...

WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入

WeClaw_42_Agent工具注册全链路&#xff1a;从BaseTool到意图识别的标准化接入作者: WeClaw 开发团队 日期: 2026-03-29 版本: v1.0 标签: Agent 工具、BaseTool、意图识别、渐进式暴露、延迟注入&#x1f4d6; 摘要 本文系统讲解 WeClaw Agent 工具注册的完整链路。当需要将一…...

华为OD面试官最爱问的10个Python八股文,我这样答拿到了Offer

华为OD Python面试实战指南&#xff1a;10个高频问题的深度解析与应答策略 面试开场&#xff1a;如何用技术叙事打动面试官 去年冬天&#xff0c;我坐在华为OD的会议室里&#xff0c;手指不自觉地敲击着桌面。面试官推了推眼镜&#xff0c;抛出了第一个Python问题。那一刻我突然…...