有人可以说明spring.application.index
属性的用途是什么,为什么我们需要它?
Application.yml:
spring:
application:
name: ServiceName
index:
答案 0 :(得分:4)
据我所知,自spring.application.index
版本以来,2.0.0.RC1
被认为已弃用。我通过比较以下这些附录来判断:
2.0.0.M7
:Common application properties,其中提到了spring.application.index
。2.0.0.RC1
:Common application properties,其中未提及spring.application.index
。通过检查以下两个版本中的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。