Spring Загрузочная загрузка в Tomcat дает 404, но работает автономно

Я тестировал Spring Boot со встроенным Tomcat около месяца, чтобы создать REST API. Все работает нормально. Теперь мы хотим развернуть API в отдельной среде разработки, в которой есть несколько других (не Spring) приложений, запущенных в контейнере Tomcat.

Я внес изменения, указанные в Преобразование приложения Boot JAR Spring в WAR с использованием Maven и Spring Загрузочные документы.

Развертывание идет хорошо (журналы в порядке, никаких ошибок) и, глядя на управление Tomcat, я вижу, что мое приложение развернуто. Однако, когда я пытаюсь получить доступ к http://localhost:8080/sophia/users в curl, я получаю 404.

Любая помощь очень ценится.

UPDATE:

Вот мои журналы:

Netbeans:

NetBeans: развертывание на Apache Tomcat 8.0.17     режим профиля: false     режим отладки: false     force redeploy: true

На месте развертывания на /home/bugz/workspace/pdcore/sophiaserver/target/sophia -server-1.0.0-SNAPSHOT

Выполняется развертывание...

развернуть конфигурационный файл =% 3A% 2Ftmp% 2Fcontext1845402702541504208.xml &? = Путь /Sophia

ОК - Развернутое приложение в контекстном пути /sophia

Начало выполняется...

начать? Путь =/Sophia

OK - Запустил приложение в контекстном пути /sophia

Tomcat:

INFO 10: 47: 52: 703 org.springframework.boot.context.embedded.ServletRegistrationBean - Сопоставление сервлета: 'dispatcherServlet' в [/sophia/*]

INFO 10: 47: 54: 042 org.springframework.boot.SpringApplication - начатое приложение за 8.285 секунд (работает JVM для 12087.301)

22-Jan-2015 10: 47: 54.060 INFO [http-nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescriptor Развертывание дескриптора конфигурации /home/bugz/workspace/server/apache -tomcat-8.0.17/conf/Catalina/localhost/sophia.xml закончил в 12 091 мс

И в файле sophia.xml для Catalina localhost:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/>

Я попытался получить доступ к

Первый возвращает 404, но с информацией CORS из моего фильтра CORS bean. Второй возврат 404 без информации CORS (который указывает, что приложение запущено и настроено, но у меня нет доступа к контроллерам).

Ответ 1

При запуске приложения путь к вызову состоит из нескольких частей.

Первый - это базовый URL, на котором развертывается приложение, в вашем случае /sophia.

Во-вторых, это отображение сервлета DispatcherServlet в вашем случае /sohpia/*.

Третий - это отображение контроллера внутри DispatcherServlet, в вашем примере /users.

Все эти вещи создают URL /sophia/sophia/users.

Разница между развертыванием как WAR заключается в том, что вы включили отдельный URL для развертывания, при запуске как банку по умолчанию его развертывают до / (root).

Вы можете исправить это, поместив /sophia в качестве server.context-path в application.properties и сопоставьте DispatcherServlet с /* или /. Это в обеих ситуациях даст вам URL-адрес, который вы хотите (и ожидаете).

Ответ 2

проверить java -version означает, что если вы выполнили войну в java 8, а tomcat работает на java 7, то это не сработает.