Пользовательский контекстный путь во внешнем tomcat

#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"/>