springProperty 的 scope 属性是干什么的?

leopardaa521 2020-08-25 12:55:07
初学 Spring Boot,对 springProperty 里的 scope 属性不明白是干什么用的,看官方文档也只有一句解释:

引用
If you need to store the property somewhere other than in local scope, you can use the scope attribute.


官方还给了一个例子:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>



看起来 scope 属性有两个值:context 和 local。


请教 scope 是什么意思,这两个值什么区别。
...全文
4637 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
木秀林 2021-03-11
  • 打赏
  • 举报
回复 3
这个问题开始描述不是很清楚,前面的回答者全以为你是在问spring 中的配置属性scope 其实你这个是logback 的扩展配置,logback 标准属性是通过 property 标签 这里意思是 你可以通过 springProperty 这个标签 让你从spring 中的环境中获取以供你在logback中使用 context 和 local 区别再哪? 直接看logback怎么对springProperty 这个tag 的解析代码可以看到 org.springframework.boot.logging.logback.SpringPropertyAction

	@Override
	public void begin(InterpretationContext context, String elementName, Attributes attributes) throws ActionException {
		String name = attributes.getValue(NAME_ATTRIBUTE);
		String source = attributes.getValue(SOURCE_ATTRIBUTE);
		Scope scope = ActionUtil.stringToScope(attributes.getValue(SCOPE_ATTRIBUTE));
		String defaultValue = attributes.getValue(DEFAULT_VALUE_ATTRIBUTE);
		if (OptionHelper.isEmpty(name) || OptionHelper.isEmpty(source)) {
			addError("The \"name\" and \"source\" attributes of <springProperty> must be set");
		}

		ActionUtil.setProperty(context, name, getValue(source, defaultValue), scope);
	} 
   
	private String getValue(String source, String defaultValue) {
		if (this.environment == null) {
			addWarn("No Spring Environment available to resolve " + source);
			return defaultValue;
		}
		return this.environment.getProperty(source, defaultValue);
	}


getValue 会从 environment 获得这个属性 (springboot 默认启动时加载的 标准servlet环境 ) scope 是对设置属性的域不同 local 是设置到 interpretaionContext 的属性map中 context 是设置到 interpretaionContext 中的上下文(是log的上下文)的属性map中 system 是设置到 System.setProperty(key, value);


    static public void setProperty(InterpretationContext ic, String key, String value, Scope scope) {
        switch (scope) {
        case LOCAL:
            ic.addSubstitutionProperty(key, value);
            break;
        case CONTEXT:
            ic.getContext().putProperty(key, value);
            break;
        case SYSTEM:
            OptionHelper.setSystemProperty(ic, key, value);
        }
    }
什么场景使用 , 我试了下 设置local 与 设置context 对我使用logback的属性没啥影响 先插个眼把 , 以后遇到再来
leopardaa521 2021-02-09
  • 打赏
  • 举报
回复
捞一把,等回复
leopardaa521 2020-08-26
  • 打赏
  • 举报
回复
引用 5 楼 KeepSayingNo 的回复:
bean是有scope这个属性,你说的这个东西确定有?
小伙子请看:
KeepSayingNo 2020-08-25
  • 打赏
  • 举报
回复
bean是有scope这个属性,你说的这个东西确定有?
leopardaa521 2020-08-25
  • 打赏
  • 举报
回复
就是想知道 context 和 local 的具体含义,以及在什么场景使用,区别是什么
明白畅达 2020-08-25
  • 打赏
  • 举报
回复
引用 2 楼 leopardaa521 的回复:
[quote=引用 1 楼 pinoco 的回复:]scope是作用范围
那 context 代表啥,local 又代表啥呢?[/quote]context是上下文环境,全局可使用,local局部使用吧,这个不是很确定
leopardaa521 2020-08-25
  • 打赏
  • 举报
回复
引用 1 楼 pinoco 的回复:
scope是作用范围
那 context 代表啥,local 又代表啥呢?
明白畅达 2020-08-25
  • 打赏
  • 举报
回复
scope是作用范围

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧