Я разрабатываю простое приложение, используя Spring Boot плюс веб-стартер Spring. Все идет очень хорошо, когда я тестирую встроенный сервер Tomcat (упаковка JAR). Мне нужно отладить некоторые вещи, поэтому я подумал, что было бы лучше развернуть его как WAR на внешнем сервере Tomcat (или на самом деле внешний сервер Pivotal tc, связанный с STS).
Я следовал процедурам, указанным в Документация по Spring Boot, и при запуске приложения я вижу журналы загрузки моих контроллеров, запросов и т. д. (да? нет.). Как только контейнер запущен, любые запросы приводят к уродливой ошибке 404.
Я понимаю, что Spring Boot создаст контейнер, совместимый с Servlet 3, поэтому файл web.xml
не должен быть строго обязательным. Все, что мне нужно сделать, это указать точку входа моего приложения на класс, который расширяет SpringBootServletInitializer
. Вот:
package com.company.ci.integration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class GitlabWebhookProcessingApplication extends
SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GitlabWebhookProcessingApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(GitlabWebhookProcessingApplication.class);
}
}
Я указываю этот класс в моем файле POM следующим образом:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.chemtech.ci.integration.GitlabWebhookProcessingApplication</start-class>
<java.version>1.7</java.version>
</properties>
Как указано в документации выше, это должно работать волшебным образом, и мое приложение будет загружено и будет работать, как и ожидалось.
А вот и логи:
Сопоставления сервлетов:
2015-06-07 20:21:16.870 INFO 3373 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2015-06-07 20:21:16.871 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'errorPageFilter' to: [/*]
2015-06-07 20:21:16.872 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-06-07 20:21:16.872 INFO 3373 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
Отображение действий контроллера:
2015-06-07 20:21:20.278 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/webhooks/mergeRequestComment],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.chemtech.ci.integration.controller.WebhookController.MergeRequestCommentReceiver(java.lang.String,com.chemtech.ci.integration.model.MergeRequestCommentEventRequestBody)
2015-06-07 20:21:20.282 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2015-06-07 20:21:20.282 INFO 3373 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
Важно подчеркнуть, что это прекрасно работает с использованием исполняемого файла JAR со встроенным сервером. Я некоторое время ломаю голову над этим и даже пытался сделать, как указано в некоторых других потоках SO:
Spring Boot — пользовательская страница 404 с автономным котом
http://forum.spring.io/forum/spring-projects/web/745458-spring-boot-v1-0-0-rc3-not-resolving-views-404-error ( не совсем по делу)
Я делаю что-то не так здесь? (ну конечно я. это чисто риторический вопрос)
Любая помощь будет высоко ценится.
Спасибо!