代码中根据配置文件确定运行环境

需求:

为了在日志中打印出足够详细的信息方便集群环境中查日志,需要打印出当前的环境,是dev,test,还是prod.

思索过后想到项目每次启动时看到的内容:

image.png

要是可以拿到这个配置文件的名称,就知道代码现在运行在哪个环境了.于是从SpringApplication.run()方法开始找相关的代码.

image.png

run方法中发现一个比较明显的printbanner方法,结合控制台的日志输出,知道打印出配置文件的位置就在下方不远,遂进入preparContext中,内容如下:

image.png

看到一个异常明显的方法,且带有log前缀,感觉八九不离十了,点击进去:

image.png

看到了没有配置profile时熟悉的提醒日志.进一步确认就是在这儿了.

line:648 通过context获取到了生效的配置,返回结果是String[],结合

image.png

可以看到,是进入了else分支,打印出逗号分割的数组内容.

得到结论 ----> context.getEnvironment().getActiveProfiles()可以拿到想要的配置文件名.

接下来就是如何去拿这个context.

SpringApplication.run()这个spring boot 启动类中必定使用的方法其实返回了context,拿到这个context就行了.

问题是我的日志是在一个common包中使用的,这个包不是一个spring boot 的应用,没法这么用.

考虑到在代码中随时访问context并访问其的一些内容有可能是常见的需求,在项目中全局搜索,看到了一个工具类如下:

image.png

这个类的结构:

image.png

定义了ApplicationContext,并且get方法进行了赋值.那么我再定义一个方法,调用getActiveProfiles就行了.

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容