我正在尝试使用Spring Cloud设置几个服务,在我将Eureka客户端服务部署到Tomcat之前,一切似乎都运行良好。当我通过网关应用调用服务时,会出现以下错误:
o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
...
Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: hello timed-out and no fallback available.
...
Caused by: java.util.concurrent.TimeoutException: null
然而,它在日食中完美地工作。当我从Tomcat运行发现和网关服务,并从eclipse运行Eureka客户端服务时,它甚至可以工作。但是一旦我在tomcat上运行相同的服务,我就会出错。
我用的是Brixton。M5、Java8和Tomcat8。
同样,代码似乎是有效的,问题是它在部署到Tomcat之后就不起作用了。
我有一个Tomcat实例用于发现和网关服务,第二个Tomcat实例用于Eureka客户端服务。
下面是一些代码和配置。。
应用程序
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApp extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(DiscoveryServerApp.class, args);
}
}
DiscoveryServer-应用程序。yml
# Configure this Discovery Server
eureka:
instance:
hostname: discovery
client: # Not a client, don't register with yourself
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:1111/discovery/eureka/
server:
port: 1111 # HTTP (Tomcat) port
context-path: /discovery
DiscoveryServer-引导。yml
spring:
application:
name: discovery
jmx:
default-domain: com.example.cloud.discovery
网关应用
@SpringCloudApplication
@EnableZuulProxy
public class GatewayApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(GatewayApplication.class, args);
}
}
GatewayApplication-application.yml
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1111/discovery/eureka/
instance:
instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
# HTTP Server
server:
port: 4444 # HTTP (Tomcat) port
context-path: /api
网关应用程序-引导。yml
# Spring properties
spring:
application:
name: gateway-service # Identify this application
jmx:
default-domain: com.example.cloud.gateway
encrypt:
failOnError: false
Dummy应用程序
@SpringCloudApplication
@RestController
public class DummyApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(DummyApplication.class, args);
}
@RequestMapping( path = "/hello-resource", method = RequestMethod.GET )
public String hello()
{
return "hello";
}
}
application.yml
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1111/discovery/eureka/
instance:
instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} # Unique id for multiple instances
# HTTP Server
server:
port: 3333 # HTTP (Tomcat) port
context-path: /hello-context
DummyApplication-bootstrap。yml
# Spring properties
spring:
application:
name: hello-service # Service registers under this name
jmx:
default-domain: com.example.cloud.hello
encrypt:
failOnError: false
好的,@SpringCloudApplication
包装@enablescoveryclient
,这会导致DummyApplication
在启动时向Eureka注册自身。您可以通过Eureka仪表板确认这一点。
假设DummyApplication
将Eureka注册为服务名称Hello-service,那么Zuul/Ribbon将为该服务名称创建路由。因此,您的/Hello资源终结点应该通过Zuul代理,地址是:http://localhost:4444/api/hello-service/hello-resource/
您应该将bowser指向端口4444(网关),而不是1111(eureka)。
我是偶然发现的。。。结果表明,服务器的值。端口需要与部署它的Tomcat实例的端口匹配。现在看起来很明显,但我想Spring会从它运行的容器中神奇地发现这一点。我想从外部位置读取配置以处理不同的环境是一个好主意,而不必进行“代码更改”。
不管怎样,答案是:确保application.yml中的server.port与目标容器上的端口匹配。
感谢所有花时间帮助我的人!
我在将spring boot应用程序部署到tomcat时遇到了问题,尽管在IDE中工作得很好。我按照https://docs.spring.io/spring-boot/docs/current/reference/html/howto-tegratic-deployment.html中的说明进行了操作 更详细的结构: mvn clear包给出错误:
我试图将spring boot应用程序部署到外部tomcat,在catalina.log文件中出现如下异常。 war文件名为:com#myapp.war。
我正在开发一个简单的应用程序,它使用泽西作为框架来构建API,并使用Jackson来处理JSON。 当我部署应用程序时,通过复制 我很确定这个问题不在java代码中,因为它曾经与*一起工作。jar包含方法。但我厌倦了这一点,希望将其迁移到maven体系结构。 我不会发布我的全部代码,但你可以在这里看到。 为了简化操作,下面列出了我使用的依赖项: jersey json v1.19 什么会导致此错误
我在spring boot(v1.5.9.release)中开发了应用程序,该应用程序与Tomcatv7.0一起工作 如何解决此问题?因为我不知道是哪个特定的依赖项导致了这个问题,我需要在哪里添加排除。请帮帮忙。
在中,上下文xml下有: 在我的spring mvc中是:
我试图在tomcat 6中部署一个Spring引导应用程序(战争)(当在tomcat 7和更旧的版本中部署时,我没有问题),事实上在tomcat 6(servlet 2.5)中部署是不可能使用新的方式(我会把描述新方式的链接放在底部),因为Spring Boot使用Servet 3.0 API初始化ServletContext(注册Servlet等),所以您不能在Servlet 2.5容器中开箱即