【问题标题】:Spring Boot EurekaClient application is not working in external TC serverSpring Boot EurekaClient 应用程序在外部 TC 服务器中不起作用
【发布时间】:2015-12-23 08:41:09
【问题描述】:

我有一个 Spring Boot 休息服务。最近,我将其更新为 Discovery Client,以利用 Spring Cloud 提供的自动发现和路由。该服务从 STS 运行时运行良好。但是,当我将它部署到外部 TC 服务器时,它并没有开始在 catalina 日志中引发以下错误。

24-Sep-2015 04:42:49.945 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing
 javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:160)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5479)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:483)
    at java.util.concurrent.FutureTask.run(FutureTask.java:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1177)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run(Thread.java:795)
Caused by: java.lang.NoClassDefFoundError: org.glassfish.jersey.server.ResourceConfig
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:94)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:169)
    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1712)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:157)
    ... 12 more
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.server.ResourceConfig
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    ... 18 more

我在 pom 中有以下与此相关的依赖项

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.1.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
.
.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<!-- For Eureka dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.0.3.RELEASE</version>
    </dependency>
<!-- End of Eureka dependency -->

我也尝试过添加以下依赖项。但是,没有运气。请提出建议。

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.11</version>
</dependency>

编辑: 应用类

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
 public static void main(String[] args) {
         SpringApplication app = new SpringApplication(Application.class);
         app.run(args);
    }
}

控制器实现

@RestController
@RequestMapping("/api")
public class ResourceController {
@RequestMapping(value="/test",  method = RequestMethod.GET)
    public String test(){
        return "Service is Alive";
    }
}

【问题讨论】:

    标签: java spring spring-boot spring-cloud service-discovery


    【解决方案1】:

    此类错误主要导致以下任何一种情况:-

    a) Respective library is missing 
    b) The version of library is old and do not hold respective implementation needed.
    c) There is more than one version of library available in classpath and app gets stuck in deciding which to use.
    

    在你的情况下,声明说“org.glassfish.jersey.server.ResourceConfig”,所以你应该包括来自项目“org.glassfish.jersey”的那个。请试试这个:-

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.22</version>
    </dependency>
    

    【讨论】:

    • 感谢您的回复。我刚试过,但没有用! :(
    • 能不能解压你刚建的war,看看这个库有没有打包,还要检查TC服务器库路径看看这个库的状态!!!
    • 是的,库在那里,应用程序正在运行,日志中没有任何错误。但是,我仍然无法从其余网址获得响应。它正在抛出 404。
    • 因此,您的应用程序未部署和抛出错误的初始问题现在似乎工作正常。现在,对于休息控制器的第二个问题,您需要分享有关任何跟踪的休息实施的详细信息。
    • 谢谢!它终于奏效了!应用程序在 TC 服务器默认端口上运行,例如8080. 我一直在尝试使用 application.properties 文件中配置的端口,即 server.port=8081
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2020-11-27
    • 2012-09-12
    • 1970-01-01
    • 2014-04-28
    • 2015-01-28
    • 2019-11-13
    • 2018-03-15
    相关资源
    最近更新 更多