春季申请指数的使用

时间:2019-05-16 07:31:26

标签: java spring spring-boot configuration

有人可以说明spring.application.index属性的用途是什么,为什么我们需要它?

Application.yml:

spring:
    application:
        name: ServiceName
        index: 

2 个答案:

答案 0 :(得分:4)

据我所知,自spring.application.index版本以来,2.0.0.RC1被认为已弃用。我通过比较以下这些附录来判断:

通过检查以下两个版本中的ContextIdApplicationContextInitializer的源代码可以证明上述说法:

  • 版本2.0.0.M7 ContextIdApplicationContextInitializer。这些版本在定制用于ApplicationContextID创建的应用程序索引方面提供了更多的可变性。

    /**
     * Placeholder pattern to resolve for application index. The following order is used
     * to find the name:
     * <ul>
     * <li>{@code vcap.application.instance_index}</li>
     * <li>{@code spring.application.index}</li>
     * <li>{@code server.port}</li>
     * <li>{@code PORT}</li>
     * </ul>
     * This order favors a platform defined index over any user defined value.
     */`"${vcap.application.instance_index:${spring.application.index:${server.port:${PORT:null}}}}"`
    
  • 版本2.0.0.RC1 ContextIdApplicationContextInitializer。 可以发现使用AtomicLong自动使索引递增,这也确保了索引的唯一性。请参阅内部ContextIdApplicationContextInitializer$ContextId类以获取源代码中的更多详细信息。关键方法是其构造函数:

    ContextId createChildId() {
        return new ContextId(this.id + "-" + this.children.incrementAndGet());
    }
    

答案 1 :(得分:1)

您可以在Spring sources中找到此属性:

private static final String INDEX_PATTERN = 
"${vcap.application.instance_index:${spring.application.index:${server.port:${PORT:null}}}}";

正如该类的Javadoc所说,它用于创建ApplicationContextID,它是应用程序上下文的唯一ID。