这只是一个后续帖子,上面的答案仍然有效。今天我遇到了同样的问题,我的 Spring Boot 应用程序在外部 Tomcat 服务器上运行时没有将自己注册到 Consul。尽管可以根据上述帖子中提到的所有信息提出一个可行的解决方案,但我在一篇帖子中提供了所有信息。
我确实必须在解决方案代码中更改一件事,即使用了注释@AutoConfigurationAfter(...)
。我不得不把它改成@AutoConfigureAfter(...)
解决方案
MyConsulLifecycle
根据解决方案代码将以下内容添加到您的应用程序中:
@Configuration
@ConditionalOnConsulEnabled
@ConditionalOnMissingBean(type= "org.springframework.cloud.consul.discovery.ConsulLifecycle")
@AutoConfigureAfter(ConsulAutoServiceRegistrationAutoConfiguration.class)
public class MyConsulLifecycle implements ApplicationContextAware {
private ConsulAutoServiceRegistration registration;
public MyConsulLifecycle(ConsulAutoServiceRegistration registration) {
this.registration = registration;
}
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (registration != null ) {
registration.start();
}
}
}
与Brian Peterson 的解决方案相反,该方法setPort()
不再可用。Sagar Veeram在他的帖子的评论中已经提到了这一点。
正如斯宾塞吉布所说,这可以通过spring.cloud.consul.discovery.port=${server.port}
在application.properties
文件中设置来解决:
server.port=8080
spring.cloud.consul.discovery.port=${server.port}
server.port
请注意,在使用独立的 Tomcat 服务器时需要一个属性有点奇怪。