带有jetty-runner的Spring Boot应用程序404

时间:2016-01-05 00:19:29

标签: spring-boot jetty

我正在尝试在Jetty上部署Spring启动Web应用程序。 我不希望使用嵌入式jetty / tomcat。 我的主要课程是:

@SpringBootApplication
public class TransformerFacadeApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(TransformerFacadeApplication.class);
    }

public static void main(String[] args) {
            SpringApplication.run(TransformerFacadeApplication.class, args);
        }
    }

我的REST资源有一个控制器定义为

@RestController
public class TransformController {

    private static final Logger LOG = LoggerFactory.getLogger(TransformController.class);


    @RequestMapping(value="/transform", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
    @ResponseBody
    public TransformStatus transform() {
    return new TransformStatus("foo");
    }
}

请注意" / transform"路径。 以下是我执行的部署步骤: 在我的gradle构建中,我有一场战争'插件定义为:

apply plugin: 'war'

以及战争名称和版本

war{
baseName = 'Foo'
version =  '0.0.1-SNAPSHOT'
}

2。这会生成一个.war文件,然后我想将其部署到jetty中。我正在使用码头跑步者。 对于码头跑步者,我尝试以下方法:

a)将jetty上下文文件foo.xml定义为:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">/tmp/zzz/foo.war</Set>
</Configure>

请注意,我已经将SpringBootServletInitializer子类化并覆盖了配置(根据Andy Wilkinson的建议)。 最后,我做了:

java -DDEBUG -jar jetty-runner-9.1.0.M0.jar foo.xml

这次启动jetty-runner会产生以下日志: 日志摘要1:

016-01-20 16:58:07.714:INFO:oejr.Runner:main: Runner
2016-01-20 16:58:07.803:INFO:oejs.Server:main: jetty-9.1.0.M0
2016-01-20 16:58:08.564:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@79f7fcd0{/,file:/private/var/folders/vt/16kh5l5j6zqcmqy7p7dvrrs4wm0dvx/T/jetty-0.0.0.0-8080-foo.war-_-any-/webapp/,AVAILABLE}{/tmp/zzz/foo.war}
2016-01-20 16:58:08.564:WARN:oejsh.RequestLogHandler:main: !RequestLog
2016-01-20 16:58:08.577:INFO:oejs.ServerConnector:main: Started ServerConnector@36217796{HTTP/1.1}{0.0.0.0:8080}

当我用卷曲curl -i -v http://localhost:8080/transform打它时, 我仍然得到404.

成功的日志摘要2:(运行时为:java -DDEBUG -jar jetty-runner-9.1.0.M0.jar /tmp/zzz/foo.war

System Property [DEBUG] has been deprecated! (Use org.eclipse.jetty.LEVEL=DEBUG instead)
2016-01-20 13:44:36.743:INFO:oejr.Runner:main: Runner
ShutdownMonitor not in use (port < 0): -1
2016-01-20 13:44:36.844:INFO:oejs.Server:main: jetty-9.1.0.M0
2016-01-20 13:44:39.564:INFO:/:main: Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration@3b783201, org.glassfish.jersey.server.spring.SpringWebApplicationInitializer@501afe27, com.myvest.microservice.TransformerFacadeApplication@1c23db87]

如果查看2个日志片段,则第2个片段来自不使用上下文的运行。这个成功的日志片段成功找到了Spring WebApplicationInitializer。 使用上下文foo.xml时,我认为没有检测到Spring WebApplicationInitialzer。为什么会这样呢?

1 个答案:

答案 0 :(得分:0)

您应该将嵌入式Web服务器依赖项更改为提供:

dependencies {
    // …
    providedRuntime 'org.springframework.boot:spring-boot-starter-jetty'
    // …
}