我正在尝试在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。为什么会这样呢?
答案 0 :(得分:0)
您应该将嵌入式Web服务器依赖项更改为提供:
dependencies {
// …
providedRuntime 'org.springframework.boot:spring-boot-starter-jetty'
// …
}