admin管理员组文章数量:1599543
目前有个需求,国际化过程中,我将我的messageSource单例Bean上增加了属性开关,即@ConditionOnProperty,相信大家都会用,然后需求来了,使用者不想挨个项目配置这个属性,想读取环境变量,这时问题就来了,我需要更健壮的condition!
这时,想到了spring-context中有Condition,可以自己实现条件筛选,nice!
其实之前没怎么接触过java中获取jvm属性(启动时传入或SystemProperties)及系统环境变量,故我的需求是:首先获取jvm属性,没有,再获取系统环境变量,这样很灵活,即能在默认时统一为全局配置相同值,又能在各个服务中自定义值,好了,jvm属性,在使用spring框架下,当然先想到了environment。
好,首先用environment获取key对应value,然后System.getEnv(key)【后来才发现多此一举,稍后说】,大功告成,开始测试。
测试设置jvm属性没有问题,
1、首先,以项目中该配置值:key 为主,以下三种方式: * -Dkey=value * --key=value * properties中配置key=value
Condition中只要填写过滤规则就行了。此处代码省略
但是当我配置好了环境变量,并且取消了jvm属性的配置时,发现environment也就是第一步的过程仍然奏效,这是怎么回事呢?难道spring已经想到了我的需求?跟进代码,发现果然如此,
org.springframework.core.env.StandardEnvironment
public class StandardEnvironment extends AbstractEnvironment {
/** System environment property source name: {@value} */
public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";
/** JVM system properties property source name: {@value} */
public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
propertySources.addLast(new MapPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
propertySources.addLast(new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
}
}
该类完美的“预测”到了我的需求,那么,省事了,而且,系统环境变量中不能有“.”、“-”这样的规则也考虑到了,会自动将属性key中的这几个字符自动替换为“_”,然后变换大小写去获取env值,大写的nice!!
版权声明:本文标题:Spring Boot:Condition使用及环境变量作为判断依据 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728324244a1154224.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论