spring boot 配置文件和属性注入
文章目录
- 配置文件
- 位置和路径
- 自定义配置文件
- 属性注入
- 添加yaml文件的支持
配置文件
位置和路径
当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。按照下面的顺序,四个配置文件的优先级依次降低
- 当前项目根目录下的 config 目录下:
config/application.properties - 当前项目的根目录下:
application.properties - resources 目录下的 config 目录下:
src/main/resources/config/application.properties - 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.properties或application.yml文件失效,换句话说该命令会用指定的配置文件替换application.properties或application.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.propertiesserver.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 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置&am…...
springboot+vue私人健身和教练预约管理系统 nt5mp
随着世界经济信息化、全球网络化的到来,信息线上管理的飞速发展,为私人健身和教练预约管理的改革起到关键作用。若想达到安全、快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的私人健身和教练预约管理系…...
Kotlin基础(十一):反射和注解
前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中,反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。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概览: - CLIP模型: 用于生成text embedding zt 和image …...
RabbitMQ-API
这里写目录标题 Hello word 模式添加依赖生产者消费者获取信道工具类 Work Queues模式消费者代码 C1开启多线程运行启动 消费者代码 C2生产者代码 消息应答自动应答消息应答的方法Multiple 的解释消息自动重新入队消息手动应答代码消费者API 队列持久化消息持久化不公平分发消息…...
外边距实现居中的写法
1、代码实例 2、默认是贴到左侧对齐的,但我们想要把他贴到中间对齐 3、居中的写法 4、这样就可以保证盒子居中了 5、以上写法仅适于行内元素和行内块元素的写法,有没有什么方法适用于行内块元素:可以添加text-align:center进行添加࿰…...
剑指 Offer 20. 表示数值的字符串 (正则 逐步分解)
文章目录 题目描述题目分析法一:完整代码: 法二:完整代码: 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者…...
【深度学习】Transformer,Self-Attention,Multi-Head Attention
必读文章: https://blog.csdn.net/qq_37541097/article/details/117691873 论文名:Attention Is All You Need 文章目录 1、Self-Attention 自注意力机制2、Multi-Head Attention 1、Self-Attention 自注意力机制 Query(Q)表示当…...
CADintosh X for mac CAD绘图软件2D CAD 程序 兼容 M1
CADintosh X for Mac是一个功能强大的2D CAD绘图程序,专为Mac用户设计。它由Lemke Software开发,提供了一套丰富的工具和功能,使用户能够轻松创建高质量的技术图纸,平面图和设计。 CADintosh X for Mac具有直观的用户界面&#x…...
【读书笔记】《厌女》- [日]上野千鹤子 - 2010年出版
不停的阅读,然后形成自己的知识体系。 2023.08. 读 《厌女》- [日]上野千鹤子 - 2010年出版 - 豆瓣读书 文章目录 2023年中文版作者序2015年中文版作者序第一章 喜欢女人的男人的厌女症 2023年中文版作者序 ‘厌女症’的现象本来如‘房间里的大象’,因为…...
Android 从其他xml文件中获取View组件数据
问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中,当用户准备离开当前活动时,可以将 EditText 中的数…...
java 数组的使用
数组 基本介绍 数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。 即:数组就是一组数据。 数组的使用 1、数组的定义 方法一 -> 单独声明 数据类型[] 数组名 new 数据类型[大小] 说明:int[] a new int…...
Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)
1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…...
外贸企业选择CRM的三大特点
外贸营销管理CRM云平台可以帮助外贸企业实现更高质量的营销管理和客户管理。无论是销售、市场营销或客户服务团队的成员,CRM都可以帮助企业更好地理解客户需求,并提供更好的服务。 1.便捷轻量级 云平台的一大优势是用户可以随时随地访问数据࿰…...
软件测试与游戏测试的区别
软件测试和游戏测试是两种不同领域的测试活动,它们之间存在一些区别,包括以下几个方面: 1. 测试目标 软件测试主要是验证和确认软件功能是否符合预期,通常关注软件的正确性、稳定性和兼容性等方面;而游戏测试则更关注游…...
Programming Abstractions in C阅读笔记:p72-p75
《Programming Abstractions In C》阅读P72-p75,每次阅读其实都有很多内容需要总结,这里摘抄其中一部分。 一、技术总结 1.字符串数组 学习《Programming Abstractions in C》第75页的时候,遇到一段代码: static string bigCitie…...
bash测试test详解
bash测试test详解 概述 任何相对完整的计算机语言都能够测试某个条件,然后根据测试的结果采取不同的动作。对于测试条件, Bash使用test命令、各种方括号和圆括号、if/then结构等来测试条件。 7.1. Test Constructs 一个if/then语句结构测试一个或多个命…...
你来问我来答,ChatGPT对话软件测试!主题互动
你来问我来答,ChatGPT对话软件测试! 大家好,我是聪明而有趣的ChatGPT。作为IT专家,我将竭尽全力为你解答技术问题,并提供适合各个级别人群理解的解决方案。无论你是初学者还是专业人士,我都会用智能、简单…...
无人机巢的作用及应用领域解析
无人机巢作为无人机领域的创新设备,不仅可以实现无人机的自主充电和电池交换,还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢,本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…...
面试热题(环形链表II)
给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
