SpringBoot小知识点
2024-10-07 14:25:05
记录SpringBoot的小知识点
一、在 Spring 上下文刷新之前设置一些自己的环境变量
需求:假设我们自己想根据某些条件设置 系统的启动端口(server.port),或设置一些别的变量时,就可以用如下方法实现。
1、实现 EnvironmentPostProcessor 接口
实现Ordered
是为了启动的顺序。
public class SkyWalkingInstanceNameInit implements EnvironmentPostProcessor, Ordered {
private static final Logger log = LoggerFactory.getLogger(SkyWalkingInstanceNameInit.class);
@Override
public int getOrder() {
return 0;
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
log.info("系统环境初始化完成");
Map<String, Object> source = new HashMap<>(4);
source.put("server.port", "9088");
MapPropertySource propertySource = new MapPropertySource("rewriteConfigProperties", source);
// 放到首位,优先级最高
environment.getPropertySources().addFirst(propertySource);
}
}
2、spring.factories 配置文件的配置
META-INF/spring.factories
的配置
org.springframework.boot.env.EnvironmentPostProcessor=\
com.huan.study.skywalking.spring.SkyWalkingInstanceNameInit
注意: ApplicationContextInitializer
也是在 应用上下文刷新之前调用,但是EnvironmentPostProcessor
要先执行。
二、多次读取Request中的流数据
1、ContentCachingRequestWrapper
多次读取请求中的数据。
2、ContentCachingResponseWrapper
多次读取响应中的数据。
三、何时启动父上下文,即如何加载bootstrap或application配置文件
1、加载父上下文
由BootstrapApplicationListener
完成。
2、加载配置文件
由ConfigFileApplicationListener
完成。
从 spring 环境中获取参数值,解析 placeHolder
System.out.println(applicationContext.getEnvironment().getProperty("server.port"));
System.out.println(applicationContext.getEnvironment().resolvePlaceholders("${server.port}"));
System.out.println(applicationContext.getEnvironment().resolvePlaceholders("${server.port1:2233}"));
最新文章
- php面向对象中的几个基本定义
- 聊聊 Web 项目二维码生成的最佳姿势
- C++中new和delete的背后
- IOSGCD
- [linux] FastDFS访问文件,400 Bad Request
- 常用CSS技巧资料收集
- QT静态链接
- 转:ElasticSearch的安装和相关插件的安装
- mybatis知识总结
- pcre函数具体解释
- JMeterPluginsCMD Command Line Tool
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- org.springframework.beans.factory.NoUniqueBeanDefinitionException 导致原因之一
- Angular4.0中常用指令
- Java学习笔记之——常用转义符号
- 20155304《网络对抗》Exp7 网络欺诈技术防范
- 解决Winform程序在不同分辨率系统下界面混乱
- &#39;0&#39;,&#39;\0&#39;,NULL,EOF的区别
- H265 Profile &; Level &; Tier 介绍
- Pedometer_forAndroid