Spring Boot EurekaClient应用程序无法在外部TC服务器中运行

时间:2015-09-25 13:36:15

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

我有一个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";
    }
}

1 个答案:

答案 0 :(得分:0)

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

int?

在您的情况下,语句中写着“org.glassfish.jersey.server.ResourceConfig”,因此您应该包含项目“org.glassfish.jersey”中的那个。请试试这个: -

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.