#tomcat #spring-boot #tomcat8
#tomcat #spring-boot #tomcat8
Вопрос:
Я создал приложение для загрузки с помощью Spring, которое я хочу запустить во внешнем tomcat 8.
В приложении с весенней загрузкой контекстный путь можно выбрать с помощью свойства server.context-path
в application.properties
, но поскольку я использую внешний tomcat 8, это свойство не используется.
Следовательно, я взглянул на документацию tomcat-8, в которой говорится:
Если вы хотите развернуть файл WAR или каталог, используя контекстный путь, который не связан с именем базового файла, то для предотвращения двойного развертывания необходимо использовать один из следующих параметров:
- Отключите автоматическое развертывание и deployOnStartup и определите все контексты в server.xml
- Найдите WAR и / или каталог за пределами базы приложений хоста и используйте context.xml файл с атрибутом docBase для его определения.
Поскольку я не хочу загрязнять server.xml
, я выбрал второй вариант. Следовательно, я нашел war /home/myuser/myapp/application-1.0.0.war
и поместил имя файла контекста application-1.0.0.xml
под conf/Catalina/localhost
. Этот файл содержит только эти 2 строки :
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" docBase="/home/myuser/myapp"/>
Я вижу в журналах, что tomcat8 запускается успешно, приложение, похоже, развернуто в диспетчере tomcat, но :
- Путь
/application-1.0.0
вместо/myapp
. - Более того, каталог
application-1.0.0
появляется вwork
каталоге, но остается пустым. - В журналах не отображаются журналы, связанные с spring, как если бы приложение никогда не было инициализировано.
Примечание: я знаю, что war верен, потому что он работает, если я помещаю его в webapp
каталог (хотя и с контекстным путем по умолчанию).
Примечание: Если я переименую application-1.0.0.xml
в foo.xml
, диспетчер tomcat показывает, что приложение развернуто в context-path /foo
(но оно все еще не запущено).
Есть идеи?
Ответ №1:
Найден ответ :
- Что касается context-path, атрибут
path
контекстного файла действительно игнорируется :
Этот атрибут должен использоваться только при статическом определении контекста в server.xml . Во всех других обстоятельствах путь будет выведен из имен файлов, используемых либо для файла контекста .xml, либо для базы документов.
- Что касается
docBase
атрибута, я неверно истолковал следующее предложение :
Найдите WAR и / или каталог за пределами базы приложений хоста и используйте context.xml файл с атрибутом docBase для его определения.
docBase
На самом деле, я ввожу путь к каталогу, который содержит войну, вместо пути к самой войне.
Комментарии:
1. Итак, какая тогда правильная конфигурация? И — нужно ли обновлять файл каждый раз при развертывании новой версии?
2. Мне тоже нужен ответ. Можете ли вы опубликовать все решение?
Ответ №2:
Если это кому-то поможет, выполните следующие действия (помещенные внутри confCatalinalocalhostservice-discovery.xml ) работает для меня на Tomcat 9
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/service-discovery" docBase="D:/Projects/codebase/apps/service-discovery/target/service-discovery.war"/>