IOC课程整理-19 Spring Environment 抽象

news2024/11/27 12:38:00

1. 理解 Spring Environment 抽象

2. Spring Environment 接口使用场景

3. Environment 占位符处理

4. 理解条件配置 Spring Profiles

5. Spring 4 重构 @Profile

6. 依赖注入 Environment

7. 依赖查找 Environment

8. 依赖注入 @Value

9. Spring 类型转换在 Environment 中的运用

10. Spring 类型转换在 @Value 中的运用

11. Spring 配置属性源 PropertySource

12. Spring 內建的配置属性源

13. 基于注解扩展 Spring 配置属性源

14. 基于 API 扩展 Spring 配置属性源

15. 课外资料

16. 面试题精选

简单介绍 Spring Environment 接口?

如何控制 PropertySource 的优先级?

在Spring中,PropertySource是用于加载和读取属性配置的机制。当存在多个PropertySource时,可以通过优先级来控制它们的加载顺序和覆盖关系。下面介绍几种常见的控制PropertySource优先级的方式:

1. 使用@Order注解: 在Spring中,可以使用@Order注解为PropertySources进行排序。@Order注解的值越小,优先级越高,即优先级越高的PropertySource先被加载。

```
@Configuration
@PropertySources({
    @PropertySource("classpath:config1.properties"),
    @PropertySource("classpath:config2.properties")
})
public class AppConfig {

    @Bean
    @Order(1) // 指定优先级,数字越小优先级越高
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}
```

2. 使用spring.profiles.active属性:在Spring Boot中,可以通过设置`spring.profiles.active`属性来决定哪个PropertySource会被加载。根据active profile的不同,Spring会加载相应的PropertySource。

```
@Configuration
@PropertySource(value = "classpath:config1.properties", ignoreResourceNotFound = true)
@PropertySource(value = "classpath:config2.properties", ignoreResourceNotFound = true)
public class AppConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setIgnoreUnresolvablePlaceholders(true);
        return configurer;
    }
}
```

通过设置`spring.profiles.active`属性为相应的配置文件名,控制只加载对应的PropertySource。

3. 使用spring.config.name和spring.config.location属性:在Spring Boot中,可以通过设置`spring.config.name`和`spring.config.location`属性来指定加载的配置文件名和位置。根据配置文件的顺序,后面的配置文件会覆盖前面的。

```
java -jar myproject.jar --spring.config.name=config1,config2
java -jar myproject.jar --spring.config.location=classpath:/default/,classpath:/custom/
```

以上是几种常见的控制PropertySource优先级的方式。根据具体的需求和场景,选择合适的方式来管理和控制属性配置的加载顺序。

当存在多个PropertySource时,它们的加载顺序会影响属性的优先级和覆盖关系。除了前面提到的方式,还可以使用以下方法控制PropertySource的优先级:

4. 使用@PropertySource注解的顺序:在使用@PropertySource注解加载属性配置文件时,可以通过调整注解的顺序来控制加载顺序和优先级。

```java
@Configuration
@PropertySource("classpath:config1.properties") // 优先级低
@PropertySource("classpath:config2.properties") // 优先级高
public class AppConfig {
    // ...
}
```

上述示例中,config2.properties的优先级更高,它的配置会覆盖config1.properties中相同的属性值。

5. 使用Environment的getPropertySources方法:通过Environment对象可以获取到加载的PropertySource,并且可以通过添加和移除PropertySource来调整它们的优先级。

```java
@Autowired
private Environment environment;

@PostConstruct
public void modifyPropertySourcePriority() {
    MutablePropertySources propertySources = ((AbstractEnvironment) environment).getPropertySources();
    // 调整PropertySource的优先级
    propertySources.addFirst(new ResourcePropertySource("classpath:config2.properties"));
}
```

上述示例中,通过调用addFirst方法将config2.properties的PropertySource添加到第一个位置,从而提高了它的优先级。

通过以上方法,可以灵活地控制和调整PropertySource的加载顺序,从而控制属性的优先级和覆盖关系。根据具体的需求和场景,选择合适的方式来管理和调整PropertySource的优先级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用dirhunt无需暴力破解即可扫描Web目录

Dirhunt 是一个针对搜索和分析目录进行优化的网络爬虫。如果服务器启用了“index of”模式,则该工具可以找到有趣的东西。如果未启用目录列表,Dirhunt 也很有用。它可以检测带有虚假 404 错误的目录、创建空索引文件以隐藏内容的目录等等。 Dirhunt 不使…

万字解析设计模式之工厂方法模式与简单工厂模式

一、概述 1.1简介 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的…

麒麟KYLINOS2303版本上使用KDE桌面共享软件

原文链接:麒麟KYLINOS2303版本上使用KDE桌面共享软件 hello,大家好啊,今天给大家推荐一个在麒麟KYLINOS桌面操作系统2303版本上使用KDE桌面共享软件的文章,通过安装KDE桌面共享软件,可以让远程vnc客户端连接访问本机桌…

飞鼠异地组网工具基本使用教程

飞飞鼠异地组网工具基本使用教程 一、飞鼠工具介绍1.1 飞鼠工具简介1.2 飞鼠工具特点1.3 飞鼠工具使用场景1.4 飞鼠工具官网1.5 飞鼠工具版本介绍1.6 飞鼠工具节点类型 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、Docker环境安装工作3.1 master节点安装Docker3.2 子…

2023年【湖南省安全员-C证】新版试题及湖南省安全员-C证证考试

题库来源:安全生产模拟考试一点通公众号小程序 湖南省安全员-C证新版试题是安全生产模拟考试一点通总题库中生成的一套湖南省安全员-C证证考试,安全生产模拟考试一点通上湖南省安全员-C证作业手机同步练习。2023年【湖南省安全员-C证】新版试题及湖南省…

简历:了解常见的设计模式

一、请讲一讲设计模式的好处 在Java中应用设计模式有以下好处: 1. 提高代码的可维护性和可读性: 设计模式提供了一种结构化的方式来组织代码,使得代码更易于理解和修改。通过使用设计模式,开发人员可以遵循一致的设计原则和最佳…

BUUCTF rar 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 这个是一个rar文件,里面好像隐藏着什么秘密,但是压缩包被加密了,毫无保留的告诉你,rar的密码是4位纯数字。 密文: 下载附件,解压得到一个rar压…

保护自己免受AI诈骗的方法

前言 在21世纪,人工智能已经成为我们日常生活的一部分。不仅在聊天、写作、绘画和编程领域展现了巨大的潜力,还改变了我们的生活方式,提供了便捷和创新。然而,随着这一技术的迅速发展,我们也不得不面对新的威胁&#…

sql--索引使用

最左前缀法则&#xff08;联合索引&#xff09; 联合索引 位置不影响&#xff0c;但是所有索引必须连续使用&#xff0c;才会走索引 中间跳过则会造成后面索引则会失效 索引失效 规避方法---尽量使用> 或 < Explain需要重点关注的字段 Type key_leng possibl…

让AI成为你的编程助手——DevChat AI插件在VSCode中的应用

文章目录 1. 前言2. DevChat注册3. DevChat安装依赖安装插件安装 4. DevChat体验写代码5. 总结 1. 前言 随着人工智能技术的飞速发展&#xff0c;ChatGPT已经成为了这个领域的一股强大力量。它的出现&#xff0c;让我们看到了人工智能在自然语言处理方面的惊人能力&#xff0c…

业务设计——透明化实现用户敏感数据加解密和历史数据洗数

文章以 敏感数据安全性存储 为背景&#xff0c;讲述 ShardingSphere 完成数据加密上线&#xff0c;以及后续的业务系统加密改造的过程。 以下如无特殊说明&#xff0c;ShardingSphere-JDBC Starter 版本为 4.1.1。 业务背景 事情的起因是集团对于敏感数据安全的重视&#xff…

【LeetCode:274. H 指数 | 二分 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

《算法通关村—计算器|逆波兰问题解析》

《算法通关村—计算器|逆波兰问题解析》 计算器问题 描述 LeetCode227.给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。 输入&#xff1a;s "32*2" 输出&#xff1a;7基本思路&#xff1a;理解题目&a…

1.1 计算机安全概念

思维导图&#xff1a; 前言&#xff1a; 第1章: 计算机与网络安全概念笔记 1. 学习目标 了解保密性、完整性和可用性的关键安全需求。了解OSI的X.800安全架构。识别和举例说明不同的安全威胁和攻击。掌握安全设计的基本准则。熟悉攻击面和攻击树的使用。了解与密码标准相关的…

VulnHub DC-1

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Springboot项目Eureka安全加密

一、通过security增加账号密码登录 1、registry服务pom增加security依赖 2、registry 配置文件 指定security账号密码 3、http://账号:密码IP:PORT/eureka/ 4、重启 二、关闭节点 三、防火墙移除eureka端口访问 参考&#xff1a;Linux(Centos7)操作记录

制作电子版宣传画册,抢占线上消费市场

随着互联网和移动设备的普及&#xff0c;企业在如今如此激烈的市场竞争中&#xff0c;怎样才能提高自身的宣传力度&#xff0c;进而让企业在市场中占一席之地呢&#xff1f;现在大多数企业都青睐于借助电子画册的形式来实现。 如何制作电子版宣传画册&#xff0c;抢占市场消费资…

02、SpringCloud -- Redis和Cookie过期时间刷新功能

目录 需求:代码流程过滤器类工具类过滤判断远程调用feign接口gitee 配置接口实现过滤器run方法测试:问题:需求: cookie应该写在网关中,网关中可以自定义filter过滤器,用来实现cookie的刷新和redis中key的刷新,延长用户的操作时间。 就是让用户每操作一次,就可以重新刷…

Springboot前后端分离同一套代码在同一台服务器上搭两个测试环境

一、Nginx监听不同端口 1、两个环境不同Service端口指定&#xff0c;可参考 中间件&#xff1a;Nginx工作使用记录&#xff08;反向代理&#xff09; 2、端口允许访问设置&#xff1a; 云服务需配置开通入方向规则 检查服务器防火墙是否开通&#xff0c;并开通端口&#xff0…

大数据学习(18)-任务并行度优化

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…