当前位置: 首页 > 知识库问答 >
问题:

为什么spring cloud consul不能与独立的tomcat一起工作?

陶朝明
2023-03-14

当在嵌入了tomcat的spring boot中运行代码时,Spring cloud consul可以像预期的那样工作。

当我们在独立的tomcat上部署代码时,它不起作用。似乎有一个领事自动服务注册通知程序,它在Web服务器上启动领事服务注册初始化事件。仅当我们在带有嵌入式 tomcat 的Spring启动内运行代码时,才会触发此事件。

https://github.com/spring-cloud/spring-cloud-consul/issues/302 提供了几种解决方法,但它们都无法再适用于最新的格林威治.RC2版本。

我们可以在独立的tomcat上启动服务注册的其他方法是什么?

如果你需要更多的细节,请告诉我。

共有2个答案

滕项明
2023-03-14

这只是一个后续帖子,上面的回答仍然有效。今天我遇到了同样的问题,我的Spring Boot应用程序在外部Tomcat服务器上运行时没有向Consul注册。虽然人们可以根据上面帖子中提到的所有信息提出一个可行的解决方案,但我已经在一篇帖子中提供了所有信息。

我确实不得不在解决方案代码中更改一件事,即使用注释@AutoConfigurationAfter(...)。我不得不把它改成@AutoConfigureAfter(...)

根据解决方案代码,将以下<code>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的解决方案相反,方法< code>setPort()不再可用。Sagar Veeram在他的帖子的评论中已经提到了这一点。

正如斯宾塞吉布所说,这是通过在应用程序属性文件中设置Spring.cloud.consul.discovery.port=${server.port} 来解决的:

server.port=8080
spring.cloud.consul.discovery.port=${server.port}

请注意,在使用独立的 Tomcat 服务器时,需要服务器 .port 属性有点奇怪。

楚煜
2023-03-14

我认为您可以设置<code>spring.cloud.consul.discovery.port=${server.port}方法。

 类似资料:
  • 我想从Spring Boot应用程序创建一个war文件,我可以将其部署到独立的Tomcat容器中,而不是使用嵌入式容器。 我可以创建war文件,并使用单独运行它,它工作得很好。 我使用(使用Gradle、Tomcat7、Java1.7)构建了应用程序。 但当我将war文件部署到独立的Tomcat并启动它时,根据日志显示,应用程序似乎没有错误地启动,但我无法访问任何资源,控制器URL也无法工作。 当

  • 我在试着为Spock中的控制器写一个测试。 应用程序类只是Spring Boot最简单的配置(支持自动扫描)。它提供了一个with PasswordEncryptor。我想用提供模拟的bean替换应用程序中的这个bean。 没有注释,所以Spring不知道应该注入哪个bean。不幸的是,我不知道如何让Spring通过本地配置从应用程序中替换bean。

  • 问题内容: 我已经在端口8080(默认)下启动并测试了Tomcat。现在,我将连接器端口更改为80,并重新启动了Tomcat,在最小的Debian 6.0安装中没有任何显示。现在,这里的窍门在哪里? 问题答案: 转到/ etc / default / tomcat6并更改为

  • 我正在启动一个基于Stephan Zerhusen出色的SpringBoot JWT演示的项目。它在我的SpringToolSuite项目中安装并运行良好。我对它的进一步开发遇到了问题。 我想将Stephan的代码(org.zerhusen)与我的业务逻辑(com.mypackage)分开。我尝试过的@SpringBootApplication和@ComponentScan配置都不适用于我。 Sp

  • 我正在使用karaf 3.0.3和以下Hibernate捆绑包: 161|活动|80|;4.2.12.Final|hibernate core 162124活动#80 1244.1.12.Final124Hibernate entitymanager 172| 124活动80#4.2-12.fin 通过这种设置,我无法让事务回滚正常工作,尽管我可以将完全相同的组件(JPA DAO、服务层等)部署为

  • 问题内容: 我已经在端口8080(默认)下启动并测试了Tomcat。现在,我将连接器端口更改为80,然后重新启动了Tomcat,在最小的Debian 6.0安装中没有任何显示。现在,这里的窍门在哪里? 问题答案: 转到/ etc / default / tomcat6并更改为