获取Spring当前配置的两种方式
作者:念念清晰
获取配置名称的2种方式
- 通过@Value注解获取
- 通过
Environment
类获取
代码示例如下
package org.example.config; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; @Configuration @Slf4j public class Config1 implements InitializingBean, EnvironmentAware { // 如果没有配置会报错,所以必须指定默认值 @Value("${spring.profiles.active:''}") private String envName; @Value("${spring.application.name:''}") private String appName; private Environment environment; // 使用注入的方式也可以获取到 Environment 对象 //@Resource //private Environment environment2; @Override public void afterPropertiesSet() throws Exception { log.info("[环境名称]通过Value注解获取 = {}", envName); log.info("[应用名称]通过Value注解获取 = {}", appName); String property = environment.getProperty("spring.application.name"); log.info("[应用名称]通过environment获取 = {}", property); String[] activeProfiles = environment.getActiveProfiles(); String[] defaultProfiles = environment.getDefaultProfiles(); if (activeProfiles.length > 0) { log.info("[环境名称]通过environment获取 = {}", activeProfiles[0]); } else { log.info("[activeProfiles为空]"); } if (defaultProfiles.length > 0) { log.info("[环境名称]通过environment获取 = {}", defaultProfiles[0]); } else { log.info("defaultProfiles为空"); } } @Override public void setEnvironment(Environment environment) { this.environment = environment; } }
运行Application
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
可以得到如下结果
[环境名称]通过Value注解获取 = ''
[应用名称]通过Value注解获取 = spring-profiles-test-default
[应用名称]通过environment获取 = spring-profiles-test-default
[activeProfiles为空]
[环境名称]通过environment获取 = default
注意
默认启动应用时,我们并未显式的指定任何profiles名称。这是Spring默认是default。如果使用@Profile
注解激活需要这样使用
@Profile({"default"})
需要注意的是,默认启动应用时。使用@Value("${spring.profiles.active}")
这种方式并不能获取到环境的名称,因为我们没有在任何地方定义spring.profiles.active这个变量。所以需要指定默认值,否则会报错。
思考
思考:哪些应用场景下,我们需要获取当前配置的名称。
- 某段代码不想放到生产环境中,但在测试环境由于某些原因又必须需要(比如方便快速定位bug等原因)
- 开发一款插件,对外提供高度定制化的配置项
假如我们要开发一款插件(或者别的项目),打包成jar包放到maven仓库供全网程序猿使用。比如pagehelper
这样有修改的插件。那插件中一定会暴露出很多配置项供开发者选择。假设我们现在有一个需求,这个插件只能在非生产环境运行。该怎么办呢?解决思路其实很简单,就是动态配置。
动态配置
如何做到动态配置呢。比如这里我开发一个插件是ibatistools,我们可以预留一个配置项activeEnv
——表示在哪些环境下可以激活,这样我们就可以读取application.yml
来获取activeEnv
的值。
到此这篇关于获取Spring当前配置的两种方式的文章就介绍到这了,更多相关获取Spring当前配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!