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

SpringBoot小知识点的更多相关文章

  1. springboot小技巧(转)

    一些springboot小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC.两种方式各有区别下面 ...

  2. SpringBoot(十三):springboot 小技巧

    原文出处: 纯洁的微笑 一些springboot小技巧.小知识点. 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JD ...

  3. 刚接触Linux,菜鸟必备的小知识点(一)

    身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...

  4. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  5. 【转】HTML5的小知识点小集合

    html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...

  6. AngularJS的小知识点

    小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...

  7. js中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻. [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" v ...

  8. html5的小知识点小集合

      html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...

  9. [BS] 小知识点总结-05

    [BS] 小知识点总结-05 1. 不论UIWindow的rootViewController是navC.tabBarC还是VC,也不管modalVC和rootVC中间隔着多少个VC,但是modal出 ...

随机推荐

  1. charles 抓包修改app页面数据

    1,首先给手机安装Charles证书,安装官方的来,在无线网配置项目,输入手动代理地址,后开启飞行模式刷新网络, 2,在浏览器输入chls.pro/ssl 下载并安装证书,此时电脑端charles 会 ...

  2. 对easyui-validatebox的验证类型的扩展

    easyui为我们提供了validatebox类型的组件,使用它可以完成自动验证,十分方便.要注意的是,easyui中的各个组件都是有继承关系的.通过查看api,textbox继承validatebo ...

  3. httpd通过ajp协议反向代理tomcat

    外网服务器上启动tomcat. [root@VM_0_12_centos bin]# ./startup.sh Using CATALINA_BASE: /root/tomcat/apache-tom ...

  4. MSSQL2008 无法分配空间,因为PRIMARY文件组已满

    1.收缩数据库日志 https://jingyan.baidu.com/article/1709ad808a279f4635c4f060.html 完整代码: --查看数据库的存放位置-- selec ...

  5. 剑指offer计划20( 搜索与回溯算法中等)---java

    1.1.题目1 剑指 Offer 07. 重建二叉树 1.2.解法 注释解法. 1.3.代码 class Solution { int[] preorder; HashMap<Integer, ...

  6. 3gcms导航,实现当前栏目高亮的办法

    <volist name="menu" id="vo" offset="0" length='8' key='k'> <l ...

  7. 什么是云效 Projex,云效Projex企业级高效研发项目管理平台

    云效项目协作Projects是一款企业级高效研发项目管理平台, 提供了快速实践的敏捷研发项目管理机制,提供对需求.迭代.缺陷各个维度的协同管理以及相关的统计报告,让研发团队高效协作.践行敏捷并持续交付 ...

  8. Docker系列(8)- 常用其他命令(1) | 日志、元数据、进程的查看

    后台启动容器 # 命令 docker run -d 镜像名 [root@localhost ~]# docker run -d centos #问题:docker ps,发现centos停止了 #常见 ...

  9. Java面向对象系列(14)- 接口的定义与实现

    接口 普通类:只有具体实现 抽象类:具体实现和规范(抽象方法)都有 接口:只有规范!约束和实现分离 接口就是规范,定义的是一组规则,体现了现实世界中"如果你是-则必须能-"的思想. ...

  10. java 163邮箱验证

    第一步:引入工具类 import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; i ...