一、在 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}"));

最新文章

  1. php面向对象中的几个基本定义
  2. 聊聊 Web 项目二维码生成的最佳姿势
  3. C++中new和delete的背后
  4. IOSGCD
  5. [linux] FastDFS访问文件,400 Bad Request
  6. 常用CSS技巧资料收集
  7. QT静态链接
  8. 转:ElasticSearch的安装和相关插件的安装
  9. mybatis知识总结
  10. pcre函数具体解释
  11. JMeterPluginsCMD Command Line Tool
  12. [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
  13. org.springframework.beans.factory.NoUniqueBeanDefinitionException 导致原因之一
  14. Angular4.0中常用指令
  15. Java学习笔记之——常用转义符号
  16. 20155304《网络对抗》Exp7 网络欺诈技术防范
  17. 解决Winform程序在不同分辨率系统下界面混乱
  18. &#39;0&#39;,&#39;\0&#39;,NULL,EOF的区别
  19. H265 Profile &amp; Level &amp; Tier 介绍
  20. Pedometer_forAndroid

热门文章

  1. IPSEC的实现方式
  2. 数组字符串json之间的相互转换
  3. .Net性能调优-MemoryPool
  4. Weblogic漏洞分析之JNDI注入-CVE-2020-14645
  5. PHP中PDO关闭连接的问题
  6. Java基础系列(10)- 类型转换
  7. CentOS7安装Docker遇到的问题笔记
  8. find_elements与find_element的区别
  9. openTSDB-采集器批量部署-tcollector
  10. CF183D-T-shirtx【dp,贪心】