springBoot加载配置文件

ops/2025/1/13 11:46:50/

1. 说明

Spring Boot会自动加载application.propertiesapplication.yml,所放置的位置如下表,所有位置的文件都会被加载(互补配置),高优先级配置内容会覆盖低优先级配置内容。

自动加载配置文件的目录及优先级
位置优先级
项目根目录config文件夹下优先级最高
项目根目录下优先级第二
resources目录中config文件夹下优先级第三
resources目录下优先级最低

2. 获取配置信息

2.1 @Value

(1) 说明

可直接用@Value注解获取已加载指定key的配置数据。

可通过 :defaultValue 设置默认值,不设置默认值时 key 不存在时会抛出异常

(2)示例

java">    @Value("${key:defaultValue}")private String demoKey;

2.2 @ConfigurationProperties

(1) 说明

将指定前缀的配置封装到实体类中。有如下属性:

ConfigurationProperties属性
属性说明
value、prefix配置前缀
ignoreInvalidFields默认是false,当绑定时候出现错误是否要忽略,这种错误一般是类型转换错误
ignoreUnknownFields默认是true,会忽略掉配置文件里未绑定到实体里的配置

(2)示例

java">@Component
@ConfigurationProperties(prefix="demo")
public class DemoProperties {// 获取demo.a1private String a1;// 获取demo.a2private String a2;//todo set/get方法
}

2.3 Environment

(1) 说明

是一个提供访问环境变量的类常用方法有:

方法说明
getProperty(String key)
getProperty(String key, String defaultValue)
getProperty(String key, Class<T> targetType)
getProperty(String key, Class<T> targetType, T defaultValue)
获取指定key的配置信息
可设置默认值或数据类型
getRequiredProperty(String key)
getRequiredProperty(String key, Class<T> targetType)
获取指定key的必要配置信息,不存在会抛异常。
resolvePlaceholders(String text)通过占位符获取配置信息。例如:${key}
resolveRequiredPlaceholders(String text)通过占位符获取必要配置信息,不存在会抛异常。
getActiveProfiles()获取当前的环境配置
getDefaultProfiles()获取默认的环境配置
acceptsProfiles(Profiles profiles)判断是否激活指定环境配置

(2)示例

java">    @AutowiredEnvironment environment;@Testvoid contextLoads2() throws Exception {System.out.println(environment.getProperty("demo.k1"));}

3. 引入外部配置文件

3.1 @PropertySource

(1) 说明

用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且还可通过YAML解析器,配合自定义PropertySourceFactory实现解析YAML文件。

属性说明
name该PropertySource的名字,如果不指定会用文件名按照一定的方式生成
value指定扫描文件的路径,可以配置多个
ignoreResourceNotFound当资源不存在时,是否忽略,默认不忽略,也就是会报错。
encoding指定文件编码
factory指定文件解析工厂,可用于解析不同类型的配置文件,如 yml

(2)示例

java">@Component
@PropertySource(value = "classpath:demo.properties",encoding = "utf-8")
public class Config {
}

3.2 PropertySourcesPlaceholderConfigurer

(1) 说明

读取外部配置文件,并将配置文件中的属性值注入到应用程序中。

(2)示例

java">    /*** 加载yml配置文件*/@Beanpublic static PropertySourcesPlaceholderConfigurer yamlConfigurer() {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();yaml.setResources(new ClassPathResource("demo.yml"));configurer.setProperties(Objects.requireNonNull(yaml.getObject()));return configurer;}/*** 加载properties配置文件*/@Beanpublic PropertySourcesPlaceholderConfigurer propertiesConfigurer() {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();configurer.setLocations(new ClassPathResource("demo.properties"));return configurer;}

3.3 直接加载并获取配置信息

(1) 说明

Properties是一个Map体系集合类,继承于Hashtable。主要用于读取Java的properties配置文件。

注:也可使用其他类库直接读取配置文件。

(2)示例

java">InputStream ips = new FileInputStream("config.properties");
Properties props = new Properties();
props.load(ips);
ips.close();
String value= props.getProperty("key");

3.4 命令行参数

(1) 说明

可以通过 --spring.config.location参数来指定配置文件的位置。

可以通过 --spring.config.name 参数指定配置文件名称。

注:也可 使用 --app.key=value  修改配置文件中的配置

(2)示例

// 加载 /path/config/ 下的myconfig.properties或myconfig.yml配置文件
java -jar app.jar --spring.config.location=file:/path/config/  --spring.config.name=myconfig

4. 分环境加载配置文件

4.1 默认加载的配置文件

(1) 说明

可通过 application-{profile}.properties 或application-{profile}.yml的方式配置多个配置文件。

注:application.properties 或application.yml可配置公共配置数据。

4.2 @Profile

(1) 说明

常和@Component、@Configuration、@Bean注解一块使用,用于标明需要spring管理类是否需要管理的环境。

注:只有配置了spring.profiles.active 或 spring.profiles.default 时@Profile才会生效。

(2)示例

java">//Config类只有在dev环境时由spring管理
//可通过配置多个不同环境的相同类来做到分环境加载配置
@Component
@Profile("dev")
public class Config {//DataSource类只有在test环境时由spring管理@Bean@Profile("test")public DataSource getTestDataSource () {return null;}
}

4.3 引入外部配置文件时自定义不同环境的文件名

java">   @Beanpublic PropertySourcesPlaceholderConfigurer configurer1(Environment environment) {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();String[] activeProfiles = environment.getActiveProfiles();if (activeProfiles != null && activeProfiles.length > 0) {YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();ClassPathResource[] resources=new ClassPathResource[activeProfiles.length];for (int i = 0; i < activeProfiles.length; i++) {resources[i]=new ClassPathResource("demo-" + activeProfiles[i] + ".yml");}yaml.setResources(resources);configurer.setProperties(Objects.requireNonNull(yaml.getObject()));}return configurer;}@Beanpublic PropertySourcesPlaceholderConfigurer configurer2(Environment environment) {PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();String[] activeProfiles = environment.getActiveProfiles();if (activeProfiles != null && activeProfiles.length > 0) {for (int i = 0; i < activeProfiles.length; i++) {configurer.setLocations(new ClassPathResource("demo-" + activeProfiles[i] + ".properties"));}}return configurer;}

5. 配置文件常用语法

 (1)可使用${key}获取其他配置数据


http://www.ppmy.cn/ops/20555.html

相关文章

2024深圳杯数学建模竞赛D题(东三省数学建模竞赛D题):建立非均质音板振动模型与参数识别模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛D题&#xff08;东三省数学建模竞赛D题&#xff0…

JavaEE进阶:Maven

创建项目 右边这张图时idea把maven的功能进行集成形成的三个jar包 怎么样利用maven打一个jar包&#xff1f; 以我当时学习JDBC时下载的jar包mysql-connector-java为例&#xff1a; 在pom.xml里面加入依赖就可以打jar包了。 <dependencies><dependency><group…

Java23种设计模式-行为型模式之备忘录模式

备忘录模式&#xff08;Memento Pattern&#xff09;:用于捕获和存储一个对象的内部状态&#xff0c;以便在以后可以将对象恢复到这个状态。备忘录模式通常用于实现撤销功能或者保存对象的历史状态。 主要角色&#xff1a; 发起人&#xff08;Originator&#xff09;&#xff…

C语言-动态内存分配

即使行动导致错误&#xff0c;却也带来了学习与成长;不行动则是停滞与萎缩。&#x1f493;&#x1f493;&#x1f493; •&#x1f319;知识回顾 亲爱的友友们大家好&#xff01;&#x1f496;&#x1f496;&#x1f496;&#xff0c;我们紧接着要进入一个新的内容&#xff0c;…

sqllibs 27-51关payload

目录 前言 Less-27 Less-27a Less-28 Less-28a Less-29 Less-30 Less-31 Less-32 Less-33 Less-34&#xff08;POST&#xff09; Less-35 Less-36 Less-37&#xff08;POST&#xff09; Less-38&#xff08;堆叠注入&#xff09; Less-39&#xff08;堆叠注入&…

前端算法

4大算法&#xff1a; 贪心算法&#xff1a;局部最优解分治算法&#xff1a;将一个问题分成多个小模块动态规划&#xff1a;每一个状态都是过去历史的总结回溯算法&#xff1a;不是最优选择的时候退回重新选 一、排序算法 1. 冒泡排序&#xff1a;数字越大越往上 第一次循环 比…

centOS 7.9操作

名称日期版本作者centOS7.9操作2024.4.271.0lll 实验题目&#xff1a; 创建一个用户。 在创建的用户中再创建一个2024的目录。 在2024的下在创建一个 1---10的目录&#xff0c;再创建一个a--z.txt的文件。 在创建一个2024bak的目录。 再将当前用户的所有文件备份到2024ba…

DL - 图像分割

from transformers import SegformerFeatureExtractor import PIL.Image#一个把图像转换为数据的工具类 feature_extractor SegformerFeatureExtractor()#模拟一批数据 pixel_values [PIL.Image.new(RGB, (200, 100), blue),PIL.Image.new(RGB, (200, 100), red) ]value [PI…