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, то это не сработает.